矩形相交球在广场上

时间:2013-07-01 12:44:02

标签: c# xna intersect

我使用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轴,具体取决于球如何击中方块而不是总是。

可能导致此问题的原因是什么?

1 个答案:

答案 0 :(得分:0)

您正在检查

if (distanceX < distanceY) 

如果我得到它,就会检测你方块的哪一侧被击中 所以,我认为你的问题是,当你的distanceXdistanceY非常相同且你的碰撞检测失败时,球会撞到角落附近的方格。在这种情况下,您需要更准确的方法来检查碰撞。