2016-04-17 8 views
0

Ich versuche an einem Projekt für die Schule zu arbeiten, aber ich kämpfe wirklich, damit meine Kugeln das feindliche Objekt perfekt treffen. Bisher kollidieren sie gelegentlich an einem zufälligen Ort auf dem Feind, aber das funktioniert nur teilweise, was frustrierend ist!Eine Kugel in DirectX mit einem Feind kollidieren lassen

Das ist, was ich bisher habe:

 for (int i = 0; i < 200; i++){ // 200 is number of bullets I use 
      for (int k = 0; k < game.enemiesVec.size(); k++){ 
      if ((((bullets[i].pos.x + 0.15f) >(game.enemiesVec[k].x))) && ((bullets[k].pos.x - 0.15f) < (game.enemiesVec[k].x)) && 
       (((bullets[i].pos.y) < (game.enemiesVec[k].y -0.15f)) && ((bullets[k].pos.y) > (game.enemiesVec[k].y +0.15f)))){ 
    //do stuff    
    game.enemiesVec[k].x = 5; 
      } 
      } 
    } 

Ich bin ahnungslos TBH, ich weiß, ich muss irgendwie vielleicht den Radius des Objekts erhalten, so dass es einen größeren Bereich mit kollidiert hat, aber ich Keine Ahnung!

Hoffentlich kann jemand helfen!

Antwort

0

Das Erhöhen der Größe der Feinde kann das Problem in einigen Situationen beheben, verhindert das Problem jedoch nicht vollständig. Deine Kugeln werden wahrscheinlich jeden Frame bewegt, was zu "Sprüngen" ihrer Position führt. Jetzt testen Sie jeden Frame ihre aktuelle Position gegen die Feinde, aber dieser Ansatz ignoriert die Bewegung zwischen den Frames. Wenn Sie also den Radius auf eine Größe erhöhen, die größer ist als die maximale Entfernung, die eine Kugel in einem Rahmen zurücklegen kann, könnten Sie die Situation vermeiden, aber dies würde zu fetten Feinden führen und es gibt immer noch Kantenfälle, als würde die Kugel nur treffen eine kleine Ecke der Begrenzungsrechtecke. Eine wirkliche Lösung wäre, eine Linie gegen die umgrenzenden Rechtecke und nicht einen einzelnen Punkt zu testen. Die Linie würde aus dem Beginn der Bewegung bestehen und zum Ende führen. Wenn diese Linie mit dem Rechteck kollidiert, hat die Kugel den Feind auf seinem Weg getroffen. Ich habe ein kleines Bild gezeichnet, um die Situation zu zeigen:

PointIntersectionProblem

mit den Line-Rechteck Schnitttests, würden Sie auch der Zufallsschnittpunkte im feindlichen Körper loszuwerden, weil Sie den Eintrag berechnen könnten Punkt.

+0

Das war eine großartige Erklärung Entschuldigung für die späte Antwort danke :) –