Skocz do zawartości

Konrad-GM

Użytkownicy
  • Postów

    2737
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    40

Odpowiedzi dodane przez Konrad-GM

  1. 22 godziny temu, gnysek napisał:

    Space Pogo / lethiandev

    Nawet się cieszę, że trafiłem z bratem do top 100, jak na dłuuugą przerwę od GMa, ale raczej do top 8 się nie dostaniemy 😆

    • Super (+1) 1
  2. Potestowałem trochę, pobiegałem, porzucałem granatami i o ile nie pojawił mi się ten bug przez większość czasu, tak na niego jednak trafiłem, przynajmniej nie jest tak jak w poprzednim demie gdzie każdy granat zostawiał rozbłysk :P image.thumb.png.5be4593900aff451ea55b0ee800931f8.png

    • Lubię (+1) 1
  3. W dniu 6.08.2021 o 17:46, Wojzax napisał:

    Z drugiej stony chciałem dać graczowi możliwość strzelania wyżej/niżej

    W The Ascent jest przycisk podnoszący celownik, może zrobienie podobnego celowania byłoby wystarczające? Normalny tryb to celownik zawieszony na jednej płaszczyźnie, ale np trzymając alt/ppm można by celować po raytracingu z kamery, wtedy celowanie w konkretny punkt też byłoby możliwe.
    Edit: Może z celownikiem laserowym też inaczej by się grało :P 

  4. Też mam tego buga z nieznikającą eksplozją po granacie, wali po oczach niemiłosiernie, aż do tego stopnia, że unikałem granatów :P Moim zdaniem gra ma potencjał, ma ciekawą mechanikę, przyjemnie się likwiduje przeciwników, ładnie i spójnie się komponuje, ale czasami sterowanie jest dość toporne jakby sterowało się czołgiem. Dodatkowo celowanie koniecznie do poprawy, jest nieintuicyjne i czasami nie wiadomo gdzie nasz gostek celuje - może zablokowanie celownika do płaszczyzny byłoby lepsze? Może to kwestia level designu, ale czasami elementy otoczenia znikają i pojawiają się dość chaotycznie i ciężko się orientować. Jak dla mnie gra bomba, trochę szlifów w sterowaniu, level design i mógłbym grać bez przerwy.

  5. W dniu 15.06.2021 o 21:34, pankracy napisał:

    animacja która powinna być odtwarzana co 5 sekund w całości

    Nie rozumiem, a to nie odtwarza się w całości czy jak, a ta animacja trwa aż 5 sekund?
     

    W dniu 15.06.2021 o 21:34, pankracy napisał:

    zresetować grawitacje mam bezpośrednio w instancji par_entity ok ale jak konkretnie ma to wyglądać?

    Może wystarczy tylko sprawdzanie, czy stoi na ziemi? `if !place_free(x, y+1) g = 1.0;`

    • Lubię (+1) 1
  6. 50 minut temu, pankracy napisał:

    tak nie zadziała,bo nie będę miał zdeklarowanej zmiennej w create trampoliny i wywali mi komunikat o braku zmiennej start.

    To dodaj zmienną `start` w Create obj_trampolina. Jeżeli ten obiekt dziedziczy z innego obiektu Create, to na początku skryptu użyj event_inherited() to wtedy Create rodzica również zostanie wywołany.

     

    50 minut temu, pankracy napisał:

    Chyba,że użyć var w step zdarzenia i dodać zmienną start?

    Nie, bo zmienna `start` będzie widoczna tylko i wyłącznie w tym bloku kodu, jak tylko go opuści to zostanie usunięta - nie będzie miała żadnej wartości, ani true ani false, przestanie kompletnie istnieć.

    Polecam przejrzeć:
    https://docs.yoyogames.com/source/dadiospice/002_reference/001_gml language overview/variables/index.html - w tym podartykuły instance variables oraz local variables.

    • Lubię (+1) 1
  7. 11 minut temu, pankracy napisał:

    kod nie działa. Nadal animacja trampoliny nie jest odtwarzana co 5 sekund i w trakcie trwania animacji gracz może odbić się od trampoliny.

    może jeszcze flaga start musi być gdzieś zdefiniowana a nie tylko w alarmie0?

    W kodzie Step nie masz ustawianej flagi `start = true` więc technicznie flaga nigdy się nie zmienia. Wstaw `start = true` zaraz pod `alarm[0] = room_speed * 5`. Dodatkowo w Step nie sprawdzasz czy `start == false` żeby uruchomić blok odpowiedzialny za skok. Np. `if start == false && place_meeting(x,y,par_entity) {`.

    • Lubię (+1) 1
  8. 1 godzinę temu, pankracy napisał:

    Słuszne jest zmiana grawitacji po bloku with par_entity prawda? Bo wtedy odwołamy się bezpośrednio do tej instancji

    Tak, jest to jak najbardziej poprawne.
     

    1 godzinę temu, pankracy napisał:

    Teraz pytanie gdzie powinno się resetować grawitacje do wartości 1

    obj_trampolina zmienia grawitację tylko wyłącznie kiedy dotknie par_entity, imo najlepiej byłoby przywrócić wartość w Step par_entity kiedy opadnie już na ziemię.

     

    • Lubię (+1) 1
  9. 20 minut temu, pankracy napisał:

    With tyczy się konkretnej instancji do ktorej chcemy się odwołać bedąc w innej:-)

    20 minut temu, pankracy napisał:

    ma to wtedy sens zmiana wartości jakiejś zmiennej bo nie zmienimy tej wartości dla wszystkich obiektów tylko dla tej jednej do której się odwołaliśmy

    1 godzinę temu, pankracy napisał:

    Konradzie zmienną globalną nie jest,ale z obiektu dziedziczącego par_entity korzysta praktycznie każdy obiekt bo dziedziczą z niego.

    Dlatego jak tam zmienię wartość

    g=1; na g=0.5; to gracz i obiekty wrogowie będą zachowywać się jakby wykonywali spacer na księżycu 😀

     

    :)

  10. 19 minut temu, pankracy napisał:

    Hmmm na to wygląda,ale jeśli ja zmienie w par_entity w zdarzeniu create wartość grawitacji

    g=1; na g=0.5; to będę jak Amstrong na Księżycu Konradzie.

    Dlatego nie ustawiaj tej wartości w create :)

    Wiesz w ogóle do czego służy blok with i dlaczego właśnie tam ustawiasz hspd i vspd instancji par_entity? Czy nagle wszystkie obiekty na ekranie skaczą wraz z graczem?

  11. 4 minuty temu, pankracy napisał:

    z obiektu dziedziczącego par_entity korzysta praktycznie każdy obiekt bo dziedziczą z niego

    Ale nie dziedziczą tych samych stanów, każda instancja tworzy własną wersję zmiennej `g` (jedynie na podstawie obiektu par_entity).

    • Lubię (+1) 1
  12. 52 minuty temu, pankracy napisał:

    w par_entity mam ją ustawioną na 1 więc tu mam ją ustawić za przełącznikiem with instance_place(x,y,par_entity)? bo jak wspomniałem jak grawitacje zmienię na 0.5 w samej instancji par_entity to mi się zmieni w całej grze a tego nie chce 🙂

    A to zmienna `g` jest zmienną globalną?

    • Lubię (+1) 1
  13. Godzinę temu, pankracy napisał:

    Dokładnie tak mam na myśli cooldown

    W takim razie musisz dodać Alarm w obiekcie obj_trampolina, np. dodaj zdarzenie Alarm[0] i w nim wstaw blok kodu resetujący flagę `start = false`. Generalnie polega to na tym, że teraz Animation End nas nie interesuje, tylko czas, więc w Animation End możesz zatrzymać animację `image_speed = 0` ale nie zmieniaj flagi `start` - to zrobi Alarm[0] po 5 sekundach.

     

    Godzinę temu, pankracy napisał:

    Co do grawitacji fakt w obiekcie dziedziczacym par_entity tam musze grawitacje zostawić na wartości g = 1; bo inaczej zmieni mi się w całej grze. Natomiast mam ją jak napisałeś sterować w trampolinie w zdarzeniu step

    No ok, ale teraz ustawiasz zmienną `g = 0.5` w instancji obj_trampolina, zamiast w par_entity, dlatego to nie zadziała. Ustaw grawitację w instancji par_entity, przecież od tego masz blok `with instance_place(x,y,par_entity)` który tak jak hspd i vspd ustawi również zmienną `g` tylko wyłącznie w instancji par_entity dotykającej trampoliny. Natomiast resetować grawitację musisz w kodzie par_entity, bo obj_trampolina nie ma pojęcia o stanie obiektu par_entity po X czasie, jak np. czy po dwóch sekundach par_entity stoi na ziemi, czy jeszcze fruwa.

    Dodatkowo w bloku `if place_meeting(x,y,par_entity)` (ale nie w `with instance_place(x,y,par_entity)`) ustawiaj Alarm, jeżeli cooldown ma trwać 5 sekund - `alarm[0] = room_speed * 5`. Mnożymy room_speed (1 sekunda) z wartością 5, to otrzymamy 5 sekund.

    • Lubię (+1) 1
  14. 19 godzin temu, pankracy napisał:

    Bo chodzi o to przypomne że gracz powinien mieć możliwość odbicia się od trampoliny dopiero jak animacja trampoliny się pokaże.

    I ta animacja powinna np co 5 sekund się pokazywać potem stan spoczynku i wtedy nie może się gracz odbić i po 5 sekundach animacja się wyswietli to wtedy może się odbić od trampoliny.

    A to masz na myśli cooldown? Że gracz może ponownie użyć trampoliny PO 5 sekundach jej użycia, czy jedynie podczas trwania animacji, ale która jest odtwarzana CO 5 sekund?

     

    19 godzin temu, pankracy napisał:

    Grawitacja wtedy powinna zwolnić o połowę a jak wyladuje to wrócić do pierwotnego stanu

    No grawitacją steruj już w Step par_entity, w kodzie gdzie sprawdzasz czy obiekt stoi na ziemi ustawiaj pierwotną wartość grawitacji `gravity = 1.0`. A ustawienie połowy grawitacji ustawiaj w kodzie, gdzie sterujesz trampoliną i ustawiasz graczowi prędkość odbicia, czyli w Step obj_trampolina, w bloku if place_meeting.
     

    19 godzin temu, pankracy napisał:

    Dźwięk trampoliny powinien być odtwarzany w chwili wyświetlania animacji.

    Jak masz if place_meeting w obj_trampolina, to tam przy okazji możesz też odtworzyć dźwięk.

    • Lubię (+1) 1
  15. 6 minut temu, pankracy napisał:

    Dobra teraz widzę,że nie mam eventu Animation Start.jest tylko Animation End,update,event

    Przejrzałem dokumentację i faktycznie nie ma tego zdarzenia, to musisz w takim razie ustawiać flagę w miejscu, gdzie uruchamiasz animację.
     

    Godzinę temu, pankracy napisał:

    Teraz grawitacje musiałbym ustawić w zdarzeniu step? I dodać warunek przy place_meeting że jak odbije się gracz to grawitacja zwolni na 0.5 a jak dotknie podłoża zresetuje się do wartości początkowej 1.

    To już zależy jak będzie działać w tym wypadku, w if z place_meeting możesz ustawiać grawitację i resetować ją w kodzie Step par_entity jak "stoi" na ziemii.
     

    1 godzinę temu, pankracy napisał:

    Nie używałem funkcji return tam powinna być wartość 0??

    return nie musi przyjmować wartości, w tym wypadku przerwie całe zdarzenie Step. Jeżeli masz więcej bloków ze skryptami, to możesz użyć break, to powinno przerwać pojedynczy blok.

    • Lubię (+1) 1
  16. 12 minut temu, pankracy napisał:

    Czyli przenieść cały kod ze zdarzenia Step do Animation Start a w zdarzeniu create dodać zmienną np start = false następnie tą zmienną start = true ustawić w zdarzeniu Animation Start. Animation End ustawić zmienną start na false.

    Kod w Step obj_trampolina zostaw, dodaj flagę `start` w Create trampoliny, ustaw ją na `true` w zdarzeniu Animation Start a `false` po zakończeniu animacji (w zdarzeniu Animation End). Dodatkowo kod w Step wzbogać o sprawdzanie flagi start np. dodając na początku `if (start == false) return;`.

     

    7 minut temu, pankracy napisał:

    A jak np troche spowolnić odbicie gracza? Powinienem zmniejszyć grawitacje?

    Jeżeli ma wolniej opadać, to tak, pozostaje modyfikacja grawitacji. Możesz też np. zresetować grawitację (z np. 0.5 do 1.0) po dotknięciu podłoża.

    • Lubię (+1) 1
  17. W dniu 11.06.2021 o 06:22, pankracy napisał:

    Od trampoliny gracz może się odbic tylko w chwili kiedy odtwarzana będzie animacja trampoliny.Jak animacja nie będzie odtwarzana to gracz nie będzie mógł się od niej odbić.Można by było trochę skok paraboliczny zwolić np ustawić odpowiednio grawitacje aby troche wolniej leciał gracz jak się odbije.

    Czyli np co 5 sekund jest odtwarzana animacja i gracz wtedy może się odbić.

    Zachowuj stan trampoliny w zmiennej, np. jakąś flagę i steruj nią podczas animacji w zdarzeniach Animation Start oraz Animation End. W kodzie odbicia przed place_meeting sprawdzaj, czy flaga jest True i tyle.

     

    W dniu 11.06.2021 o 06:22, pankracy napisał:

    I druga sprawa dźwièk trampoliny powinien odtwarzać się w chwili wyswietlania animacji oraz na bliskim dystanie od gracza.

    Sprawę z wyswietlaniem animacji można rozwiązac używając zapewne zdarzenia Alarm ale dalej nie mam pomysłu na resztę.

    Możesz odpalić dźwięk w zdarzeniu Animation Start.

     

    • Lubię (+1) 1
  18. 4 godziny temu, Ice Cube napisał:

    Właśnie niestety gm8, ale muszę w nim skonczyć projekt, bo konwersja na gm2 nie wchodzi w grę.

    Muszę znaleźc złoty środek, by gra działała na słabych i mocnych kompach, tak by fps był w granicach 15-30.
    Czytałem coś o delta time, ale nie wiem jak to ugryźć.

     

    Ustaw room_speed na 30, ale, żeby zminimalizować różnice animacji/chodzenia między innymi komputerami to niestety pozostaje liczenie delty.

     

    Delta to nic innego jak czas jaki upłynął między poprzednią wyświetloną klatką a aktualnie rysowaną, w gm8 niestety nie ma wbudowanej zmiennej delta_time, musisz takową policzyć samemu: 

    // Create
    global.previous_time = current_time
    global.delta_time = 1.0 / room_speed
    
    // Begin Step
    global.delta_time = (current_time - global.previous_time) / 1000.0
    global.previous_time = current_time


    Możesz to wrzucić w jakiś kontroler i niekoniecznie w każdym obiekcie liczyć deltę osobno.

     

    Teraz, żeby np. bohater poruszał się ze "stałą" prędkością na dwóch kompach, to można zrobić coś takiego:

    // Liczymy jak daleko poruszył się gracz od ostatniej klatki
    // Zakładając, że używasz lenghtdirów (ale nie musisz), mnożymy prędkość gracza przez deltę
    x += lengthdir_x(global.delta_time * player_speed, direction)
    y += lengthdir_y(global.delta_time * player_speed, direction)

     

    4 godziny temu, Ice Cube napisał:

    Myślę nad czymś takim by :

    1.sprawdzić jak szybki jest dany komputer

    2.jeżeli za szybki to spowolnic odpowiednio do 30 fps stosując w kodzie coś co będzie odpowiednio zamulac kompa.

    3.jeżeli za wolny to poprostu wyświetlic napis, że procek nie daje rady :D

    Nie polecam sprawdzać "jak szybki jest dany komputer", bo to nie jest użyteczne w tym wypadku. Dodatkowo limit fps (maksymalny) w GM ustawiasz zmienną room_speed, także nie ma potrzeby sprawdzania ile maszyna wyciąga, bo jeżeli będzie wolniejsza to i tak magicznie nie przyśpieszy to działania, tutaj w main loopie nie ma akurat czego optymalizować ;) 

  19. Godzinę temu, Ice Cube napisał:

    ccc.jpg

    Na moje oko wygląda to na z-fighting, precyzji z-buffera w GM nie można zmienić, ale zakładam, że i tak jest ustawiony na 24bity. Niestety pozostaje zmniejszenie maksymalnej odległości rysowania na mniejszą, albo zrobić niewielką przestrzeń między nakładającymi się teksturami, bądź w ogóle nie rysować nakładających się ścian.

    • Lubię (+1) 1
×
×
  • Dodaj nową pozycję...