矩形与正方形上的球相交

本文关键字:正方形 | 更新日期: 2023-09-27 18:20:44

我正在制作一款类似Peggle Deluxe的游戏,使用C#XNA进行学习。

我有两个长方形,一个球和一个正方形的场地。球从大炮里射出,如果球击中正方形,正方形就会消失,球就会飞走,但球并没有真实地弹出来;它有时会朝着不同的方向飞去,或者卡在边缘。

这是我目前的代码:

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轴,但并不总是如此。

是什么原因导致了这个问题?

矩形与正方形上的球相交

您正在检查

if (distanceX < distanceY) 

以检测你的方块的哪一边被击中,如果我得到的话。
所以,我认为你的问题是,当球击中角落附近的正方形时,当你的distanceXdistanceY完全相同,碰撞检测失败时。在这种情况下,您需要一种更准确的方法来检查碰撞。