0

動くターゲットに弾丸を発射する簡単なJavaゲームがあります。両方のオブジェクトはGRectsです。私はufoと弾丸が互いに交差するときをチェックする衝突検出を持っています、しかしここに奇妙さがあります:

これは機能します:

private void collideWithUFO() { 
    if (bullet != null) {
        GObject collObj = getElementAt(ufo.getX(), ufo.getY()); 
        if (collObj == bullet) {
            remove(ufo); 
            remove(bullet); 
            ufo = null; 
            bullet = null;
        }
     }
}

..しかし、以下のように箇条書きに変更し、getElementAtufoを確認すると、衝突を検出できません。

private void collideWithUFO() { 
    if (bullet != null) {
        GObject collObj = getElementAt(bullet.getX(), bullet.getY()); 
        if (collObj == ufo) {
            remove(ufo); 
            remove(bullet); 
            ufo = null; 
            bullet = null;
        }
     }
 }

私が最初にufoを選ぶか弾丸を選ぶかは関係ないはずですが、明らかにそうではありません。今ここにさらに奇妙なものがあります。弾丸をGRectからGOvalに変更すると、突然、2番目の形式の衝突検出が機能します。私はJava初心者なので、この動作に意味があるかどうか教えてください。

4

1 に答える 1

3
public GObject getElementAt(double x, double y)

Returns the topmost graphical object that contains the point (x, y), or null if no such object exists.

したがってgetElementAt(bullet.getX(), bullet.getY())、ufoが最上位のグラフィック要素である場合にのみufoを提供します。それ以外の場合は、箇条書きを取得します。

于 2012-09-08T23:14:44.007 に答える