[Allegro] Poruszanie się po kratkach
Ostatnio zmodyfikowano 2009-05-18 21:33
PhonniX Temat założony przez niniejszego użytkownika |
[Allegro] Poruszanie się po kratkach » 2009-05-18 14:32:09 Witam. Po dłuższej przerwie postanowiłem wrócić do pisania gry w allegro. Mam mapkę po której porusza się postać, ale chcę aby ona poruszała się po kratkach (40x40) ale nie w ten sposób, że przeskakuje z jednej na drugą, ale przechodzi. Próbowałem już kilka sposobów (np: po kliknięciu klawisza włączyć pętle w której dodaje 40 razy +1 do pozycji gracza) ale żaden nie działa. Jeśli ktoś wie jak to zrobić, to niech piszę w tym temacie. Z góry dziękuje. |
|
WunM |
» 2009-05-18 16:25:55 Masz dwa stany: idzie i nie idzie. Kiedy gracz wciśnie klawisz w np. górę a stan idzie jest aktywny to odrzucasz to. Gdy stan nie idzie jest aktywny przyjmujesz tą propozycję i przemieszczasz gracza w dane pole (zależne od naciśniętego klawisza). Miejsce docelowe możesz zapisać sobie w jakiejś zmiennej. Robisz oddzielną funkcję która stopniowo przemieszcza gracza w dane pole aż dojdzie. Potem znowu przyjmujesz propozycję gracz (gdzie iść) i znowu koło. |
|
DejaVu |
» 2009-05-18 16:27:24 int kierunekX = 0; int kierunekY = 0;
if( pozycjaX % 40 == 0 && pozycjaY % 40 == 0 ) { kierunekX = 0; kierunekY = 0; if( key[ VK_RIGHT ] ) kierunekX = + 1; else if( key[ VK_LEFT ] ) kierunekX = - 1; else if( key[ VK_DOWN ] ) kierunekY = + 1; else if( key[ VK_UP ] ) kierunekY = - 1; } pozycjaX += kierunekX; pozycjaY += kierunekY;
Dla każdego obiektu tak mniej więcej powinno być to zrealizowane. /edit: Wymoderowałem moje niedopatrzenie, które zostało napisane w poniższym poście ;p |
|
steckel |
» 2009-05-18 16:34:09 Ja bym zamienił to: if( pozycjaX % 40 == 0 && pozycjaX % 40 == 0 )
na to: if( pozycjaX % 40 == 0 && pozycjaY % 40 == 0 )
|
|
PhonniX Temat założony przez niniejszego użytkownika |
» 2009-05-18 17:03:00 Wszystko działa, ale mam jeszcze jedno pytanie. Mam animacje postaci, podczas jednego kroku dodaje frame+1, a następnie sprawdza if( frame >= 0 && frame < 1 ) { ludek.klatka = 0; } else if( frame >= 1 && frame < 2 ) { ludek.klatka = 1; } else if( frame >= 2 && frame < 3 ) { ludek.klatka = 2; } else if( frame >= 3 && frame < 4 ) { ludek.klatka = 3; }
Al chce zrobić, że podczas jednego kroku wykonuje 3 sekwencje animacji. |
|
WunM |
» 2009-05-18 17:06:09 To wiązałoby się z tym że ludzik chodził by 3-razy wolniej. Czyli co 3-tury jeden krok. Możesz przyśpieszyć timer 3-razy,ale nie wiem czy wszystko zobaczysz (tzn. czy efekt nie będzie taki sam jak w przypadku jednej animacji w jednej sekwencji ruchu). |
|
PhonniX Temat założony przez niniejszego użytkownika |
» 2009-05-18 19:56:49 A niemożna jakoś zrobić ,że po przejściu ileś tam pixeli zmienia się klatka? |
|
steckel |
» 2009-05-18 20:55:59 Można int ip = 0; if( pozycjaX % 40 == 0 && pozycjaY % 40 == 0 ) { kierunekX = 0; kierunekY = 0; if( key[ VK_RIGHT ] ) { kierunekX = + 1; ip++; } else if( key[ VK_LEFT ] ) { kierunekX = - 1; ip++; } else if( key[ VK_DOWN ] ) { kierunekY = + 1; ip++; } else if( key[ VK_UP ] ) { kierunekY = - 1; ip++; } if( ip > 5 ) { ip = 0; } }
ip - ilość pixeli, po których ma być zmiana klatki. |
|
« 1 » 2 |