ich ein 2D OpenGL Spiel, die ich in aabb Kollisionserkennung zu implementieren versuchen Hier ist die Kollisionserkennung Code.OpenGL 2D Kollisionserkennung nicht funktioniert
boolean collisionX = position.x + size.x + dx >= collision.position.x && collision.position.x + collision.size.x >= position.x + dx;
boolean collisionY = position.y + size.y + dy >= collision.position.y && collision.position.y + collision.size.y >= position.y + dy;
return collisionX && collisionY;
Für die Größe, die ich diese Berechnung verwenden , weil einige dieser Sprites aus Texturatlanten stammen.
size.x = pixelWidth * scaleX/modelTexture.spriteWidth,
size.y = pixelHeight * scaleY/modelTexture.spriteWidth
I verwenden modelTexture.spriteWidth für beide, da die Höhe und die Breite des Texturatlas des gleiche ist, weil es ein 2^x Quadrat ist.
PixelWidth und PixelHeight sind die Pixelgröße des Bildes auf der Textur, von mir gezählt.
Ich denke, das Problem könnte wegen dieser Berechnungen sein, wenn sie falsch sind. Lass es mich wissen, bitte.
Die Kollisionserkennung scheint jedoch an den falschen Stellen zu geschehen, als ob die Bounding Box jedes Sprites in der Mitte beginnt und sich nach rechts oben erstreckt. Ich habe versucht, dies mit einem Verschiebungsvektor zu erklären, der gleich -size/2f ist. Aber leider hat sich daran nichts geändert.
Denken Sie, das Problem der Ursprung der Sprites/Objekte sein könnten:
Hier ist ein Beispiel für eine Kollision, die nicht korrekt alligned scheint zu sein? Was ist im Mittelpunkt? Wenn ja, wie würde ich den Ursprung nach oben links setzen?
Versuchen Sie eine der Standardmethoden, z.B. 'boolean schneidet = neues Rechteck (x1, y1, width1, height1) .intersects (neues Rectangle (x2, y2, width2, height2));' from 'java.awt' und sehen, wie das geht –
Wenn Sie das skalieren müssen Größen, müssen Sie wahrscheinlich die Positionen entsprechend skalieren? –
'Position.x + Größe.x + dx> = Kollision.Position.x && Kollision.Position.x + Kollision.Größe.x> = Position.x + dx;' sollte es nicht ein '||' hier sein ? (Same of y) Nur eine Intuition den Code zu lesen, habe ich nicht die Mathematik – Zouch