Kolizje obiektów - "przeszkadzanie sobie"
Ostatnio zmodyfikowano 2015-02-27 17:10
Brunon3 Temat założony przez niniejszego użytkownika |
Kolizje obiektów - "przeszkadzanie sobie" » 2015-02-24 14:19:46 Witam. Otóż mam problem; napisałem obsługę kolizji z graczem w klasie GameObject, i wszystko pięknie działało dopóki nie zrobiłem kilka instancji obiektów tej klasy. Wtedy obiekty "przeszkadzają sobie" w ten sposób, że każdy sprawdza czy gracz z nim koliduje i jeżeli tak, ustawia zmienną ze struktury collider w obiekcie gracza na true, else na false. Przez to liczy się "zdanie" tylko obiektu, którego Update() został wywołany jako ostatni przed Update()'em gracza. Próbowałem to usprawnić na wiele sposobów, ale mi się nie udało. Proszę więc tu o pomoc. Kod: void GameObject::collision( Player & gracz, GameObject & objekt ) { if(( gracz.y <=(( objekt.y - gracz.camera.y ) + objekt.h ) ) &&( gracz.y + gracz.h >=(( objekt.y - gracz.camera.y ) ) ) ) { if(( gracz.x ==(( objekt.x - gracz.camera.x ) + objekt.w ) ) ) { gracz.collision.left = true; } else gracz.collision.left = false; } else gracz.collision.left = false; if(( gracz.y <=(( objekt.y - gracz.camera.y ) + objekt.h ) ) &&( gracz.y + gracz.h >=(( objekt.y - gracz.camera.y ) ) ) ) { if((( gracz.x + gracz.w ) ==( objekt.x - gracz.camera.x ) ) ) { gracz.collision.right = true; } else gracz.collision.right = false; } else gracz.collision.right = false; if(( gracz.x <=(( objekt.x - gracz.camera.x ) + objekt.w ) ) &&( gracz.x + gracz.w >=(( objekt.x - gracz.camera.x ) ) ) ) { if((( gracz.y + gracz.h ) ==( objekt.y - gracz.camera.y ) ) ) { gracz.collision.down = true; } else gracz.collision.down = false; } else if( gracz.collision.down ) gracz.collision.down = false; if(( gracz.x <=(( objekt.x - gracz.camera.x ) + objekt.w ) ) &&( gracz.x + gracz.w >=(( objekt.x - gracz.camera.x ) ) ) ) { if( gracz.y ==(( objekt.y + objekt.h ) - gracz.camera.y ) ) { gracz.collision.up = true; } else gracz.collision.up = false; } else gracz.collision.up = false; }
void Player::Update( BITMAP * bitmap ) { if( key[ KEY_UP ] && collision.up == false ) camera.y--; if( key[ KEY_DOWN ] && collision.down == false ) camera.y++; if( key[ KEY_LEFT ] && collision.left == false ) camera.x--; if( key[ KEY_RIGHT ] && collision.right == false ) camera.x++; App::drawBITMAP( bitmap, x, y, w, h ); }
Pozdrawiam, Brunon. EDIT: Pomoże ktoś? |
|
pekfos |
» 2015-02-25 20:22:35 Ustawiaj wyłącznie na true, a false ustaw raz, przed sprawdzeniem wszystkich kolizji? |
|
pekfos |
» 2015-02-25 20:34:02 Ustawiaj wyłącznie na true, a false ustaw raz, przed sprawdzeniem wszystkich kolizji? |
|
Brunon3 Temat założony przez niniejszego użytkownika |
» 2015-02-27 17:10:50 Już sobie poradziłem. :) Nagle dostałem "oświecenia". :D Odwołuję się do pozycji bezpośrednio. |
|
« 1 » |