[Allegro] Poprawna kolizja na mapie kafelkowej
Ostatnio zmodyfikowano 2013-09-22 12:45
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: 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ź. |
|
SeaMonster131 |
» 2013-09-22 12:03:13 Ja robiłem coś w tym stylu: 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. |
|
hit Temat założony przez niniejszego użytkownika |
» 2013-09-22 12:45:02 Działa jak należy, dziękuję Ci. |
|
« 1 » |