C# 使用相交开关的椭圆反弹
我有一个应用程序,其中是球(椭圆)和4个矩形(每个矩形代表窗口的边缘)。我试着写一个应用程序,让球从边缘移动和反弹。我不知道如何制作一种方法,当碰撞为真时,球改变方向 XAML: 所以我在InitMove()中尝试了类似的smth。这只是一个测试代码,向您展示什么是问题C# 使用相交开关的椭圆反弹,c#,wpf,collision-detection,C#,Wpf,Collision Detection,我有一个应用程序,其中是球(椭圆)和4个矩形(每个矩形代表窗口的边缘)。我试着写一个应用程序,让球从边缘移动和反弹。我不知道如何制作一种方法,当碰撞为真时,球改变方向 XAML: 所以我在InitMove()中尝试了类似的smth。这只是一个测试代码,向您展示什么是问题 private void InitMove() { ....... if (CollisionDetection()) { if (isMovingLeft) {
private void InitMove()
{
.......
if (CollisionDetection())
{
if (isMovingLeft)
{
isMovingLeft = false;
isMovingRight = true;
}
}
所以球从左到右改变了方向。现在还可以
现在,当我想输入下一个“如果”时,问题就开始了
现在球经过矩形的边缘,并没有反弹。这就是我的问题
如何使它正确
//编辑
当我添加其他
if (isMovingLeft)
{
isMovingLeft = false;
isMovingRight = true;
}
else if (isMovingRight)
{
isMovingRight = false;
isMovingLeft = true;
}
球刚停在窗户边上
//编辑2
好吧,我想我知道怎么对你做这个
if (isMovingLeft)
{
isMovingLeft = false;
isMovingRight = true;
ballDirectionX += 2;
}
else if (isMovingRight)
{
isMovingRight = false;
isMovingLeft = true;
ballDirectionX -= 2;
}
所以我增加了一些动作来把球推出墙外。我现在看不到其他方法。您应该添加一个
否则
语句:
if (isMovingLeft)
{
isMovingLeft = false;
isMovingRight = true;
}
else if (isMovingRight)
{
isMovingRight = false;
isMovingLeft = true;
}
当球向左移动时,两个
if
语句相互抵消。首先检查它是否向左移动,然后将其设置为向右移动。然后立即计算下一个if
语句,将其更改为再次向左移动。每次代码运行时都会发生这种情况
您需要将第二个if语句更改为
else if
,这样它就不会在同一帧中同时执行这两个操作。另外,反弹可能看起来有点奇怪,除非你把它们从墙上推出来的量与它们进入墙的量相同,但这是另一个问题。现在球只是停在边缘。当我添加你的陈述时,球只是停在边缘。单if if(isMovingLeft){…}在没有其他ofc的情况下工作。可能你总是反转isMovingLeft
和IsMovingRight
,因为球总是在碰撞中,请尝试在碰撞检查后放置使球移动的代码。在主柱中张贴结果。问题是如何将它们推回墙外:D
if (isMovingLeft)
{
isMovingLeft = false;
isMovingRight = true;
}
else if (isMovingRight)
{
isMovingRight = false;
isMovingLeft = true;
}
if (isMovingLeft)
{
isMovingLeft = false;
isMovingRight = true;
ballDirectionX += 2;
}
else if (isMovingRight)
{
isMovingRight = false;
isMovingLeft = true;
ballDirectionX -= 2;
}
if (isMovingLeft)
{
isMovingLeft = false;
isMovingRight = true;
}
else if (isMovingRight)
{
isMovingRight = false;
isMovingLeft = true;
}