OpenGL 2D碰撞检测不起作用

时间:2016-07-10 16:20:48

标签: java opengl 2d collision-detection

我有一个2D OpenGL游戏,我正在尝试实现aabb碰撞检测。这是碰撞检测代码:

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;

对于我使用此计算的大小,因为其中一些精灵来自纹理图集。

size.x = pixelWidth * scaleX / modelTexture.spriteWidth,
size.y = pixelHeight * scaleY / modelTexture.spriteWidth

我使用 modelTexture.spriteWidth ,因为纹理图集的高度和宽度是相同的,因为它是2 ^ x的正方形。

PixelWidth和PixelHeight 是纹理上图像的像素大小,由我统计。

我认为问题可能是因为这些计算,如果他们错了。请告诉我。

然而,碰撞检测似乎发生在错误的地方,好像每个精灵的边界框从中心开始并向右上方延伸。我试图使用等于-size / 2f的位移矢量来解释这个问题。但不幸的是,它没有改变任何东西。

以下是一个碰撞示例,它似乎没有正确对齐:

enter image description here

你认为问题可能是精灵/物体的起源吗?哪个是中心。如果是这样,我如何将原点设置在左上角?

1 个答案:

答案 0 :(得分:0)

我认为你只是在一方面验证碰撞。要验证冲突,您必须执行以下操作:

collisionX = (right_side_Obj1 > left_side_Obj2 && left_side_Obj1 < left_side_Obj2) 
|| (left_side_Obj1 < right_side_Obj2 && right_side_Obj1 > right_side_Obj2);

在你的情况下,我认为它应该是:

boolean collisionX = (position.x + size.x + dx >= collision.position.x 
            && position.x <= collision.position.x)
        || (position.x - dx <= collision.position.x + collision.size.x
            && position.x + + size.x >= collision.position.x + collision.size.x);