gpt4 book ai didi

java - OpenGL 2D 碰撞检测不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 12:26:50 24 4
gpt4 key购买 nike

我有一个 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;

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

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

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

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

我认为问题可能是由于这些计算(如果它们是错误的)造成的。请告诉我。

但是,碰撞检测似乎发生在错误的位置,就好像每个 Sprite 的边界框从中心开始并向右上角延伸。我尝试使用等于 -size/2f 的位移 vector 来解释这一点。但不幸的是它没有改变任何东西。

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

enter image description here

您认为问题可能是 Sprite /对象的起源吗?这是在中心。如果是这样,我如何将原点设置为左上角?

最佳答案

我认为你只是验证与一侧的碰撞。要验证碰撞,您必须执行类似的操作:

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);

关于java - OpenGL 2D 碰撞检测不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38293996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com