我目前正在将此类代码用于像游戏这样的《太空入侵者》中的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;
}
}