Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro] Poprawna kolizja na mapie kafelkowej

Ostatnio zmodyfikowano 2013-09-22 12:45
Autor Wiadomość
hit
Temat założony przez niniejszego użytkownika
[Allegro] Poprawna kolizja na mapie kafelkowej
» 2013-09-22 11:43:25
Witam,

tym razem mój problem dotyczy kolizji na mapie kafelkowej.
Przeszukałem forum, czytałem ten temat:

http://cpp0x.pl/forum/temat/?id=5585&p=2

i w sumie poniekąd kolizja działa, ale nie do końca poprawnie. Mój ludek koliduje ze ścianami dookoła, ale dlatego, że jest ciągłość elementów, z którymi ma kolidować. Jednak i tak na prawej ścianie i dolnej ludek gładko się przesuwa podczas kolizji, a przy lewej i górnej się 'przykleja' do ściany i nie wiem jak poprawnie zapisać kod, żeby tak nie było.
Obecnie wygląda to tak:

C/C++
if( key[ KEY_LEFT ] && mapa[( bomber_y / 40 ) ][( bomber_x / 40 ) ] != 1 ) bomber_x--;

if( key[ KEY_RIGHT ] && mapa[( bomber_y / 40 ) ][( bomber_x / 40 + 1 ) ] != 1 ) bomber_x++;

if( key[ KEY_UP ] && mapa[( bomber_y / 40 ) ][( bomber_x / 40 ) ] != 1 ) bomber_y--;

if( key[ KEY_DOWN ] && mapa[( bomber_y / 40 + 1 ) ][( bomber_x / 40 ) ] != 1 ) bomber_y++;


Ponadto przez to ludek niepoprawnie koliduje z elementami na planszy, kiedy stoi bardziej na prawo  to koliduje, jak tu:

http://i39.tinypic.com/fp2iok.jpg

a wystarczy kilka pikseli w lewo i jest tak:

http://i39.tinypic.com/fp2iok.png

rozumiem, że ma to związek z tym, że nie określam nigdzie jego szerokości ale nie mam pomysłu jak to dopisać tutaj.
Pozdrawiam i liczę na jakąś podpowiedź.

P-92459
SeaMonster131
» 2013-09-22 12:03:13
Ja robiłem coś w tym stylu:

C/C++
if( klawisz_w_lewo && mapa[( bomber_y ) / 40 ][( bomber_x - 5 ) / 40 ] != 1 && mapa[( bomber_y + postac_h ) / 40 ][( bomber_x - 5 ) / 40 ] != 1 )
     bomber_x--;


Co oznacza, że jeżeli 5px (czy ile tam chcesz ;) w lewo nie ma kafelka, to postać może się tam poruszyć. Sprawdzany jest lewy górny i dolny wierzchołek. Podobnie dla innych kierunków.
P-92460
hit
Temat założony przez niniejszego użytkownika
» 2013-09-22 12:45:02
Działa jak należy, dziękuję Ci.
P-92470
« 1 »
  Strona 1 z 1