java - LWJGL碰撞检测缺陷

标签 java collision-detection lwjgl

我目前正在我的《太空入侵者》之类的游戏中使用此代码进行 2D 碰撞检测:

for(byte k = 0; k < enemies.length; k++) {
    if(shot.x < enemies[k].getTexture().getImageWidth() && shot.x  > enemies[k].pos.x) {
            if(shot.y - 1.2f * frameCount < enemies[k].pos.y && shot.y - 1.2f * frameCount > Main.enemies[k].pos.y - enemies[k].getTexture().getTextureHeight()) {
                    Main.enemies[k].hit = true;
            }
    }
}

然而,这种类型的碰撞检测有一个主要缺陷:我只能检测到来自下面的碰撞。这是为什么?

最佳答案

你只从底部发生碰撞的原因是 您的边界检查有一些错误。 下面我给出了一个固定且稍微清晰的版本, 我假设 shotWidth 和 shotHeight 是可以计算的。 (我遗漏了有关frameCount的部分,但它应该 如果需要的话可以再次编辑它)。

final int shotX = shot.x;
final int shotY = shot.y;
final int shotWidth = ?
final int shotHeight = ?
for(byte k = 0; k < enemies.length; k++) {
    final int enemyX = enemies[k].pos.x;
    final int enemyY = enemies[k].pos.y;
    final int enemyWidth = enemies[k].getTexture().getImageWidth();
    final int enemyHeight = enemies[k].getTexture().getImageHeight();

    if(     shotX < enemyX + enemyWidth &&
            shotX + shotWidth < enemyX &&

            shotY < enemyY + enemyHeight &&
            shotY + shotHeight < enemyY) {

        Main.enemies[k].hit = true;
    }
}

关于java - LWJGL碰撞检测缺陷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10585746/

相关文章:

java - 多接口(interface): instanceof cannot differentiate different interfaces

java - 为什么我的游戏碰撞检测关闭了 500 像素?

java - 将C++ OpenGL转换为Java(LWJGL), glBufferData();

svg - 检测 svg 路径和 svg 文本之间的冲突

java - 如何停止渲染不可见的面孔

java - 尝试用鼠标移动四边形/正方形 - LWJGL

java - 从 URL 的数组中获取数组

java - SimpleCursorAdapter 无法在 ListActivity 中工作,日志中没有错误

java - java中默认的新线程名称是如何给出的?

collision-detection - 计算轴对齐边界框的大小