LWJGL碰撞检测缺陷

时间:2012-05-14 14:52:58

标签: java collision-detection lwjgl

我目前在我的Space Invaders中使用此代码进行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;
            }
    }
}

然而,这种碰撞检测存在一个主要缺陷;我只能检测下面发生的碰撞。这是为什么?

1 个答案:

答案 0 :(得分:2)

你只是从底部发生碰撞的原因是 你的边界检查有一些错误。 下面我给出了一个固定且稍微清晰的版本, 我假设可以计算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;
    }
}