Skocz do zawartości

Poruszanie się, Grawitacja


Krowek

Rekomendowane odpowiedzi

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.

Odnośnik do komentarza
Udostępnij na innych stronach

1. Jak zablokować poruszanie się po skosie?

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

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.

 

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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.

 

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ę).

Odnośnik do komentarza
Udostępnij na innych stronach

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

Odnośnik do komentarza
Udostępnij na innych stronach

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ść.

Odnośnik do komentarza
Udostępnij na innych stronach

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ść.

 

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.

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

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ę.

Odnośnik do komentarza
Udostępnij na innych stronach

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ę.

 

Możesz przesłać cały, dużo się przy nim nauczysz i za tydzień czy dwa zaczniesz nowy na bazie tego co się nauczyłeś.

Od razu Ci podpowiadam, że popełniłeś w założeniach takie rzeczy, że na nie nawet garść uspokajaczy nie pomoże jak zaczniesz rozwijać projekt i na nie kląć :)

Ale każdy tak robi na początku po przejściu z ikonek, więc się nie stresuj.

Nintendo te tak robiło dawno temu :)

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...