我使用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轴,具体取决于球如何击中方块而不是总是。
可能导致此问题的原因是什么?
答案 0 :(得分:0)
您正在检查
if (distanceX < distanceY)
如果我得到它,就会检测你方块的哪一侧被击中
所以,我认为你的问题是,当你的distanceX
和distanceY
非常相同且你的碰撞检测失败时,球会撞到角落附近的方格。在这种情况下,您需要更准确的方法来检查碰撞。