1

私は Peggle Deluxe のようなゲームを使用C#XNAて学習用に作成しています。

2 つの長方形、ボール、正方形のフィールドがあります。ボールは大砲から発射され、ボールが四角に当たると、四角が消えてボールが飛び去りますが、ボールは現実的に飛び散りません。時々、別の方向に飛んだり、端に引っかかったりします。

これは現時点での私のコードです:

public void Update(Ball b, Deadline dl) 
    { 

        ArrayList listToDelete = new ArrayList(); 
        foreach (Field aField in allFields) 
        { 
            if (aField.square.Intersects(b.ballhere)) 
            { 
                listToDelete.Add(aField); 
                Punkte = Punkte + 100; 

                float distanceX = Math.Abs(b.ballhere.X - aField.square.X); 
                float distanceY = Math.Abs(b.ballhere.Y - aField.square.Y); 

                if (distanceX < distanceY) 
                { 
                    b.myMovement.X = -b.myMovement.X; 
                } 
                else 
                { 
                    b.myMovement.Y = -b.myMovement.Y; 
                } 

            } 
        }

ボールが正方形に当たる方法に応じて X 軸または Y 軸を変更しますが、常にではありません。

この問題の原因は何ですか?

4

1 に答える 1

0

チェックしています

if (distanceX < distanceY) 

私がそれを得た場合、あなたの正方形のどちら側が攻撃されているかを検出します。
だから、あなたの問題は、ボールがコーナー近くの正方形に当たったとき、あなたdistanceXdistanceYがまったく同じで、衝突検出が失敗したときだと思います。その場合、衝突を確認するより正確な方法が必要です。

于 2013-08-20T02:42:20.360 に答える