1

私は現在、スペースインベーダーのようなゲームで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 つあります。下から来る衝突しか検出できません。どうしてこれなの?

4

1 に答える 1

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;
    }
}
于 2012-05-14T16:24:54.140 に答える