[SFML2] Bounding box collision
Ostatnio zmodyfikowano 2015-03-24 21:12
qest43 Temat założony przez niniejszego użytkownika |
[SFML2] Bounding box collision » 2015-03-22 15:23:17 Użyłem do obsługi kolizji sprite.getGlobalBounds().intersects() jednak kolizja wykrywa się gdy gracz wejdzie już na kaflę, wtedy jeśli np. idzie w prawo to zamiast przesuwać gracza o moveSpeed, przesuwałem o -moveSpeed. Ale gdy kolizja wystąpiła a ja wcisnąłem klawisz w lewo będąc po lewej stronie kafla, to wtedy przesuwało gracza na przeciwną stronę. Dodatkowo występowały błędy podczas ruchów po skosie. Czy można jakoś za pomoca tych funkcji napisać kolizję, czy tę funkcję wykorzystuje się tylko do zbierania jakichś bonusów, a kolizję powinno napisać się na zasadzie wzorów odległości? |
|
pekfos |
» 2015-03-22 16:06:15 Można. |
|
colorgreen19 |
» 2015-03-23 07:16:41 Kiedy tymi funkcjami wykryjesz kolizje, to np. ustaw sobie flagi z której strony jest kolizja. Potem na podstawie tych flag określisz czy możesz się poruszać w daną stronę, a jeśli nie to np. wyzerujesz prędkość ruchu w daną stronę |
|
Brunon3 |
» 2015-03-23 07:35:40 Ja żeby uniknąć dziwnych błędów przy większej liczbie obiektów, robiłem tak jak @up ale zamiast "flag" po prostu odejmowałem/dodawałem pozycję x/y gracza, można również robić to za pomocą "=", co byłoby nawet lepszym pomysłem.
PS. Tylko że ja to robiłem w Allegro (i w dodatku 4.2), ale to chyba nie ma w tym temacie większego znaczenia. ;)
-BD. |
|
NopeDotAvi |
» 2015-03-24 21:12:30 getGlobalBounds() zwraca sf::FloatRect , w którym są takie publiczne zmienne jak 1. left 2. top 3. width 4. height więc możesz zrobić mniej więcej tak: sf::FloatRect playerRect = player.getGlobalBounds(); sf::FloatRect otherRect = other.getGlobalBounds();
if( playreRect.intersects( otherRect ) ) { if( playerRect.top > otherRect.top ) }
http://www.sfml-dev.org/documentation/2.0/classsf_1_1Rect.php |
|
« 1 » |