我有一个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的位移矢量来解释这个问题。但不幸的是,它没有改变任何东西。
以下是一个碰撞示例,它似乎没有正确对齐:
你认为问题可能是精灵/物体的起源吗?哪个是中心。如果是这样,我如何将原点设置在左上角?
答案 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);