0

説明:

現在、ほぼ完成しているプロジェクトがありますが、衝突が実際には機能していないことに気付きました。タッチ スクリーンを介して制御できるヘビのようなゲームなので、鋭い (?、申し訳ありませんがドイツ語) 角度が可能です。現時点では、少し回転できるように、少し許容範囲を残しています (最初の 2 つのスプライトは無視します)。主な問題は、スプライトが回転しているため、コリジョン ボックスが大きすぎることです。ゲーム エンジンや OpenGL は使用していません。

衝突コード: offsetX と offsetY はビットマップの幅または高さ / 2 で、ヘビの頭で呼び出されます。ヘビ (鳥) の各リンクは配置可能です

public boolean doesHit(Placeable p) {
    int xLen = Math.abs(this.x - p.x);
    int yLen = Math.abs(this.y - p.y);
    if (bmp != null) {
        if (xLen < offsetX + p.offsetX && yLen < offsetY + p.offsetY)
            return true;
    } else {
        if (xLen < Bird.BIG_W[Bird.mUseBird] / 2
                && yLen < Bird.BIG_H[Bird.mUseBird] / 2)
            return true;
    }
    return false;
}

TL;DR / 質問:

Rects を回転させてから比較する方法はありますか (ゲームはこれとは別に既に終了しているため、推奨されます)。それとも、OpenGL / ゲーム エンジンに移植するのが最も簡単な方法でしょうか?

4

1 に答える 1

2

最良のオプションは、OpenGL を使用し、交差する回転ポリゴンを使用することです。

ただし、簡単なハックのために、スプライトを長方形ではなく円と見なすように dosHit() ルーチンを変更します。こうすることで、回転時に境界の外側に成長しなくなります。その代償は、コーナーでの衝突検出がお粗末になることです。

于 2011-07-11T10:35:42.803 に答える