Problem mit Kollisonsabfrage

FaNo86

Mitglied
Hi,
ich habe ein Problem mit der Kollisonsabfrage und zwar habe ich 2 Vierecke und ich versuche gerade nur die Y-Achse abzufragen also so:
Code:
void kollision(float *OYPOS,float spielerYpos, bool &kollidiert)
{
if(OYPOS[0] == spielerYpos)         //OYPOS[0] ist die Y-Position des objekts
    {
        kollidiert=true;
         
    }
    else
    {
        kollidiert=false;
        
    }
}
und jetzt ist es so das es nur ganz selten mal stopt wenn sie die gleiche Y-Position haben. ich habe die Zahlen ausgeben lassen und sie sind oft gleich aber es fährt fast jedes mal darüber.

hier noch die Tastaturabfrage:
z.B
bei UP:
Code:
else if(key[SDLK_UP])
      {
                      
                      Spieler.showObjekt("phinten.bmp",1);
                      spielerYpos=Spieler.getYPos();
                      spielerXpos=Spieler.getXPos();
            
                      if(kollidiert==false)
                      {
                                           
                      spielerYpos+=0.005; 
                      cameraY-=0.002; 
                      Spieler.setYPos(spielerYpos);
                      
                      
                      }
         }
Die Kollisoinsabfrage ist eine Funktion die rufe ich dann am Ender der main schleife auf und davor speichere ich nochmal die aktuelle Position von dem Spieler:
Code:
spielerYpos=Spieler.getYPos();
spielerXpos=Spieler.getXPos();
kollision(OYPOS,spielerYpos, kollidiert);
Auserhalb der main schleife speicher ich schon die Y-Position von dem Objekt in das Array OYPOS[0];

Ich hoffe ihr könnt mir helfen ich benutze c++ + SDL + OpenGL und den DevC++ als Compailer

mfg Fabi
 
Hallo,

float Werte auf einen Gleichheitsoperator anzuwenden ist zwar möglich, führt aber seltenst zum gewünschten Resultat. Du solltest viel mehr auf einen möglichen Bereich abfragen:

C++:
void
kollision (float *OYPOS, float spielerYpos, bool &kollidiert)
{
  if (OYPOS[0] - 0.05 < spielerYpos && spielerYpos> YPOS[0] + 0.05)
    {
      /* spielerYpos befindet sich +- 0.05 um OYPOS[0] herum */
      kollidiert = true;
    }
}

Eine andre Möglichkeit wäre die float Werte vor dem Vergleich auf Ganzzahlen zu runden bzw abzuschneiden.

Gruß,
RedWing
 
Zurück