0

画面にペイントされたオブジェクトの衝突をチェックするのに問題があります。例:私は現在ヘビゲームを作成しており、ヘビが特定のブロックオブジェクトに当たっているかどうかを確認する必要があります(これにより、ヘビがブロックに当たる/「食べる」と、ヘビが増加し、スコアが増加します)。そこで、ヘビとブロックオブジェクトの衝突をチェックする関数を作成しましたが、正しく機能しません(ヘビと一緒にオブジェクトを真上から移動すると、機能しますが、それ以外の場合は機能しません):

public boolean checkColision() {
    if(SnakeObjs.get(0).x >= obj.x && SnakeObjs.get(0).x
                <= obj.x+10 && SnakeObjs.get(0).y
                >= obj.y && SnakeObjs.get(0).y <= obj.y+10) {
        return true;
    }else{
        return false;
    }
}

この関数は衝突をチェックします。ここSnakeObjs.get(0)には、ブロックオブジェクトをヒットする必要があるスネークオブジェクトobjのx座標とy座標が含まれ、との衝突をチェックするためのブロックオブジェクトのx座標とy座標が含まれます。

ブロックオブジェクトとスネークオブジェクトの両方をペイントするpaintメソッドは、次のようになります。

public void paint(Graphics g) {
    for(int i=0;i<SnakeObjs.size();i++) {
        g.setColor(new Color(
                        (int)((double)Math.random()*200.0),
                        (int)((double)Math.random()*200.0),
                        (int)((double)Math.random()*200.0)));
        g.fillRect(SnakeObjs.get(i).x, SnakeObjs.get(i).y, 10, 10);
        g.setColor(Color.WHITE);
        g.drawRect(SnakeObjs.get(i).x-1, SnakeObjs.get(i).y-1, 12, 12);
    }
    g.setColor(new Color(
                    (int)((double)Math.random()*200.0),
                    (int)((double)Math.random()*200.0),
                    (int)((double)Math.random()*200.0)));
    g.fillRect(obj.x, obj.y, 10, 10);
    g.setColor(Color.BLACK);
    g.drawString("Score: "+score, 10, 10);
}

誰かがこの衝突の問題について私を助けてくれるなら、それは素晴らしいことです。

前もって感謝します、

よろしく、Skyfe。

4

1 に答える 1

0

間違いは、一方のオブジェクトを長方形として解釈し、もう一方を点として解釈することです。ポイントが長方形内にあるかどうかを確認し、両方の長方形が交差しているかどうかは確認しません。それが右からそして上から働くこと。

ヘビとオブジェクトの長方形を保存することをお勧めします。getBounds()メソッドを追加します。次に、Rectangleのメソッドintersect()を使用できます。この境界を描画操作に使用することもできます。

于 2010-11-06T15:59:27.013 に答える