Skocz do zawartości

Krowek

Użytkownicy
  • Postów

    7
  • Dołączył

  • Ostatnia wizyta

Odpowiedzi opublikowane przez Krowek

  1. Z odbijaniem to nie wiem jaki masz kod ale podejrzewam że testujesz zajętość i zwracasz cofkę ruchu z odwróceniem znaku.

     

    Poszukaj polecenia potential step czy coś w ten deseń się to nazywało...

    place_meeting(x, y, ob);

     

    To to chyba. Testuje, robi cofkę bez zmian i odpowiada czy ignorować dalszy ruch czy nie.

     

    Mógłbym ci przesłać fragment mojego projektu to może byś coś zaradził na okręcanie się przy tych kolizjach? Już tydzień nad tym siedzę.

  2. Ale problemem jest to że wpycha jedną w miejsce drugiej, bo skrzynie nie testują wzajemnej zajętości.

     

    Jeśli gracz pcha skrzynię, to skrzynia sprawdza czy inna skrzynia... i tworzysz łańcuch lub macierz korelacji.

    A jak się pozbyć dalej efektu odbijania postaci? Już próbowałem po przez zwiększenie dampingu ale i tak gdy postać uderzy o róg obiektu to się obróci. Może by zrobić co by mi nawet pasowało żeby postać się poruszała o wielkość siatki textury ( w moim przypadku 128x128) tylko w tedy postać strasznie szybko się porusza i nie wiem jak dodać prędkość.

  3. 2d rpg to takie japońskie czy takie platformowe?

     

    Jak platformowe to sprawdzasz kolizję z obiektem ale kładziesz od podłoża, więc się nakładają licząc od podłogi. Skrzynka na podłodze musi przejmować właściwość podłogi i texturę skrzynki.

     

    A obracają się bo masz kolizje z rewersem (cofającą z punktu kolizji) z dziedziczeniem znaku tyle że sign() algebry nad ciałem liczb rzeczywistych nie jest symetryczny, trzeba go wyciągać z funkcji i przydawać po przeliczeniu (dlatego istnieje funkcja sign()).

     

    //nie jestem pewien czy to skumasz, postać ma inne sterowanie w lewo i wprawo ponieważ zrobiłeś - i + speed. Powinno być speed i direction, wtedy unikasz znaku (masz sign(+)). Teraz jeśli ciśniesz klawisza w prawo i trafiasz na przeszkodę to Ci cofa i obraca postać, ale klawisza ciśniesz więc ją obraca znowu, trafia na ścianę i robi się pralka;

    często w takim sterowaniu w lewo po prostu się zatrzymują na przeszkodach, dlatego stare gry szły z lewa w prawo, oszczędzało się na kodzie^^

     

     

     

    Jeśli skrzynie wchodzą jedne pod drugie to musisz albo im zliczać kolizje i przenieść łańcuchem na postać (żeby nie pchał), albo dodać im bezwładność (i masę).

     

    W chwili obecnej mam taki skrypt na poruszanie postaci:

    GML
    ismoving = false;

    {

    switch (keyboard_key)

    {

    case vk_left:

    case ord("A"):

    sprite_index = spr_Player_Left;

    phy_position_x -= move_speed;

    image_speed=0.1;

    ismoving= true;

    break;

     

    case vk_right:

    case ord("D"):

    sprite_index = spr_Player_Right;

    phy_position_x += move_speed;

    image_speed=0.1;

    ismoving= true;

    break;

    case vk_up:

    case ord("W"):

    sprite_index = spr_Player_Up;

    phy_position_y -= move_speed;

    image_speed=0.1;

    ismoving= true;

    break;

    case vk_down:

    case ord("S"):

    sprite_index = spr_Player_Down;

    phy_position_y += move_speed;

    image_speed=0.1;

    ismoving= true;

    break;

    }

    }

    if(!ismoving){

    image_speed = 0;

    image_index = 1;

    }

    Zaś Step skrzyni, aby się przesuwała:

    GML
    if (place_meeting(x,y,obj_Player && keyboard_check('D')))

    {

    phy_position_x += move_speed; (direction_x = move_speed?)

    ismoving = false;

    }

    if (place_meeting(x,y,obj_Player && keyboard_check('A')))

    {

    phy_position_x -= move_speed;

    ismoving = false;

    }

     

    Mógłbyś mi przetworzyć mój skrypt bo zbytnio nie wiem o co ci chodzi.

     

    I bardziej wytłumaczyć jak naprawić nachodzenie się textur przesuwnych obiektów.

     

    Moje ustawienia dla obiektu:

    34ab82e7cb246.png

     

    Problem:

    d2910ecece903.png

  4. 1 i 2 - zamień tę serię warunków na switch

     

    3. Jeśli pracujesz na obiektach (rozumiem że tak robisz) to każdy z nich może mieć przypisaną grawitację, na przykład o wartości zero, to wtedy wykona się ruch o zero.

    Proponowana wartość dla inkrementalnej grawitacji to -1

    wtedy obiekty spadają o pixel i najwyżej są odpychane z powrotem (będą drżały jak się im przyjrzysz, robi się jeszcze jedną pętlę która ten flicking kasuje).

    W grawitacji inkrementalnej -- w normalnych warunkach arcade nie uzyskasz prędkości przelatywania przez obiekty, wystarczy głęboka podłoga.

    To NESowa fizyka Mario.

     

     

    Lub kwadratowej -2 gdzie *sign(-1) (bo -1 generalnie mało efektywnie się pomnaża), i trzeba wprowadzić prędkość graniczną mniejszą niż głębokość próbkowanego kafla podłogi (bo jak Ci się coś rozpędzi to będzie próbkowało głęboko pod ziemią i przeleci przez podłogę( no chyba że robisz próbkowanie liniowe.

    Ta opcja wymaga oczywiście potrzeby i pewnego rozeznania co tu jeszcze można sss.

    Dzięki za pomoc zmienił sterowanie na switch-e. Lecz z ta grawitacja to nie za bardzo wiem jak zrobić. Mój projekt room (nie posiada grawitacji) i sterowaniem przypomina 2d rpg i na mapie znajdują się obiekty które gracz przesuwa (skrzynki), jeżeli gracz przesunie skrzynkę do przepaści skrzynka ma spaść do momentu aż na potka obiekt z którym koliduje. Moje skrzynki się przesuwają ale nie spadają. Gdy wchodzą w kolizje z obiektem to nie wiem czemu wchodzą pod kolejny obiekt (nakładanie się textur). Gdy gracz lub skrzynka wchodzi w kolizje z jakimś obiektem to się obraca.

  5. 1. Jak zablokować poruszanie się po skosie?

    2.Gdy wcisnę klawisze poruszania się np. W+D moja postać zaczyna się obracać - jak to naprawić?

    GML
    ismoving = false;

     

     

    if(keyboard_check(ord("A")))

    {

    sprite_index = spr_Player_Left;

    ismoving = true;

    image_speed=0.1;

    phy_position_x -= move_speed;

    ismoving= true;

    }

     

    if(keyboard_check(ord("D"))){

    sprite_index = spr_Player_Right;

    ismoving = true;

    image_speed=0.1;

    phy_position_x += move_speed;

    }

     

    if(keyboard_check(ord("W"))){

    sprite_index = spr_Player_Up;

    ismoving = true;

    image_speed=0.1;

    phy_position_y -= move_speed;

    }

     

    if(keyboard_check(ord("S"))){

    sprite_index = spr_Player_Down;

    ismoving = true;

    image_speed=0.1;

    phy_position_y += move_speed;

    }

     

    if(!ismoving){

    image_speed = 0;

    image_index = 1;

    }

     

    3. Jak dodać grawitacje do obiektu lub wyłączyć tylko postaci, a pozostałe obiekty na mapie ja posiadały? (Grawitacja tylko w osi Y)

     

    Z góry dziękuję za pomoc.

×
×
  • Dodaj nową pozycję...