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

[SFML2] Bounding box collision

Ostatnio zmodyfikowano 2015-03-24 21:12
Autor Wiadomość
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?
P-128936
pekfos
» 2015-03-22 16:06:15
Można.
P-128942
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ę
P-128991
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.
P-128993
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:
C/C++
sf::FloatRect playerRect = player.getGlobalBounds();
sf::FloatRect otherRect = other.getGlobalBounds();

if( playreRect.intersects( otherRect ) )
{
    if( playerRect.top > otherRect.top )
    //tutaj możesz tak kombinować
}

http://www.sfml-dev.org/documentation/2.0/classsf_1_1Rect.php
P-129113
« 1 »
  Strona 1 z 1