[SFML] Kolizja kafelkowa - organizacja kodu
Ostatnio zmodyfikowano 2014-08-31 13:19
Acarin1995 Temat założony przez niniejszego użytkownika |
[SFML] Kolizja kafelkowa - organizacja kodu » 2014-08-26 21:37:46 Witam mam problem z kolizją działa tylko na niektórych blokach... I czasami nie na tych co trzeba... Nie wiem co zrobiłem źle. while( App.isOpen() ) { px = postac.getPosition().x / 16; py = postac.getPosition().y / 16; sf::Event zdarzenie; while( App.pollEvent( zdarzenie ) ) { if( zdarzenie.type == sf::Event::Closed ) App.close(); if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) ) { if( mapa[ px ][ py - 16 ] == 0 || mapa[ px ][ py - 16 ] == 2 ) postac.move( 0, - 16 ); } else if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) ) { if( mapa[ px ][ py + 16 ] == 0 || mapa[ px ][ py + 16 ] == 2 ) postac.move( 0, 16 ); } else if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) ) { if( mapa[ px - 16 ][ py ] == 0 || mapa[ px - 16 ][ py ] == 2 ) postac.move( - 16, 0 ); } else if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) { if( mapa[ px ][ py + 16 ] == 0 || mapa[ px ][ py + 16 ] == 2 ) postac.move( 16, 0 ); } } App.clear( sf::Color::White ); Mapa.rysujjMape(); App.draw( postac ); App.display(); } [ cpp ] Kafelek ma 16x16 pixeli tak samo posta ć. |
|
pekfos |
» 2014-08-26 21:43:01 if( mapa[ px ][ py - 16 ] == 0 || mapa[ px ][ py - 16 ] == 2 )
|
Na pewno 16 powinno tu być? |
|
DejaVu |
» 2014-08-26 21:46:32 Polecam Ci pomyśleć jak wykrywać kolizje kafelkowe w czytelniejszy sposób. np. if( !czyKolizja( mapa, aktualna_pozycja.x - 1, aktualna_pozycja.y ) ) przesunPozycje( aktualna_pozycja, - 1, 0 );
albo: Pozycja nowaPozycja = aktualnaPozycja; if( lewo ) nowaPozycja.x -= 1;
if( prawo ) nowaPozycja.x += 1;
if( gora ) nowaPozycja.y -= 1;
if( dol ) nowaPozycja.y += 1;
if( !mapa.czyKolizja( nowaPozycja ) ) aktualnaPozycja = nowaPozycja;
|
|
Acarin1995 Temat założony przez niniejszego użytkownika |
» 2014-08-27 08:44:23 Macie racje panowie pomyliłem cyfre... Dzięki Pekfos powinno być 1 a nie 16... :D A propo kolizji jak ograniczyć Gracza by nie wychodzić poza mape? Kolizja z blokiem koloru tła? |
|
pekfos |
» 2014-08-27 10:17:44 A propo kolizji jak ograniczyć Gracza by nie wychodzić poza mape? Kolizja z blokiem koloru tła? |
Prościej sprawdzić współrzędne, ale kombinuj jak uważasz. |
|
Acarin1995 Temat założony przez niniejszego użytkownika |
» 2014-08-31 12:16:33 if( mapa[ px ][ py - 1 ] == 0 || mapa[ px ][ py - 1 ] == 2 ) &&( py > 0 && px > 0 ) &&( px < granicax && py < granicay )
granica y i x wynosi 160. Postać wychodzi poza obie granice co jest nie tak? |
|
pekfos |
» 2014-08-31 13:19:08 Zmniejsz je o 1. |
|
« 1 » |