Brauche Hilfe bei Kollisionsabfrage



  • Hallo,

    ich versuche gerade eine Kollisionsabfrage in ein Spiel einzubauen. Bei dem Spiel geht es darum dass man ein Raumschiff steuert und von oben immer wieder Asteroiden auf einen zufliegen. Ich möchte jetzt eine Kollisionsabfrage zwischen Schiff und Asteroiden einbauen. Meine sieht folgendermaßen aus:

    void CGame::CheckPlayerCollisions ()
    {
    	list<CAsteroid>::iterator ItAsteroid;
    
    	SDL_Rect RectPlayer;
    	SDL_Rect RectAsteroid;
    
    	RectPlayer = m_pPlayer->GetRect();
    
    	for(ItAsteroid = m_AsteroidList.begin ();
    		ItAsteroid != m_AsteroidList.end ();
    		++ItAsteroid)
    	{
    		RectAsteroid = ItAsteroid->GetRect();
    
    		if (RectPlayer.y < RectAsteroid.y + RectAsteroid.h &&
    			RectPlayer.y + RectPlayer.h > RectAsteroid.y &&
    			RectPlayer.x < RectAsteroid.x + RectAsteroid.w &&
    			RectPlayer.x + RectPlayer.w > RectAsteroid.x)
    		{
    			m_pPlayer->SetAlive(false);
    			break;
    		}
    	}
    }
    

    Das Problem ist nur, dass das Spiel auch abbricht, wenn keine Kollision stattgefunden hat, es muss also ein Fehler in der Kollisionsabfrage sein, den ich leider nicht finde. Ich hoffe einer von euch findet den Fehler.



  • Hm - sieht richtig aus. Wir hatten das schon mal hier. Aber Dein Code stimmt mit dem überein. Sind die Werte in den Membern 'h' und 'w' positiv? Bei 'x' und 'y' wär's egal.

    Gruß
    Werner



  • Hallo

    Da der Code aus einem Buch ist, musst du doch nur kontrollieren, ob du ihn richtig abgeschrieben hast und wenn das der Fall ist, hast du wahrscheinlich irgendwo anders einen Tippfehler.

    chrische


Anmelden zum Antworten