1

我正在使用C#XNA学习制作像 Peggle Deluxe 这样的游戏。

我有两个矩形、一个球和一个正方形区域。球从大炮中射出,如果球击中方格,方格消失,球飞走,但球并没有实际弹起;它有时会朝不同的方向飞走或卡在边缘。

这是我目前的代码:

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 回答