我正在研究这种处理碰撞检测的方法。我对初始化为true的方向bool有问题。有时,当激发一个对象时,角度是颠倒的,因为它期望bool为false。
如果对象最初指向左侧(在我的代码中介于0和350之间),那么bool应该为true。如果指向右侧(在350和700之间),则布尔值应该为false。
如何在不影响后续碰撞检测的情况下将初始bool设置为适当的true/false值?
我认为问题是当我尝试检查方向,然后设置它时,我无意中对对象施加了约束。我想不出怎么把这两者分开。理想情况下,0到350之间的检查和350到700之间的检查应该只发生一次,但每次调用方法时都会检查它们,这就是导致问题的原因。
//Move bubble
public void MoveBubble(Bubble bubble, Vector2 distance)
{
if (bubble.stop == false)
{
velocityX = speed * distance.X;
velocityY = speed * distance.Y;
bubble.X += velocityX;
//Problem section
if (bubble.Y > 0 && bubble.Y < 350)
direction = true;
if (bubble.Y > 350 && bubble.Y < 700)
direction = false;
//End Problem section
if (direction == true)
bubble.Y += velocityY;
if (direction == false)
bubble.Y -= velocityY;
if (bubble.Y <= 0 || bubble.Y >= 350)
direction = !direction;
}
} 修复代码:
//Move bubble and reverse it's velocity if it collides with a wall
internal void MoveBubble(Bubble bubble, Vector2 distance)
{
if (bubble.stopped == false)
if (bubble.Y < 0 || bubble.Y > 350)
bubble.velocityY = -bubble.velocityY;
bubble.Y += bubble.velocityY;
bubble.X += bubble.velocityX;
}发布于 2011-05-03 20:06:07
在移动气泡之前,你必须检查气泡的位置。在移动结束时的位置,您可能超出了屏幕的边界。
解释我的意思
我看到你在这里做的是:
在我看来,你要做的是
检查方向跟随气泡移动
当你开始另一个移动时,你需要检查气泡的方向。
发布于 2011-05-03 20:03:43
我会说你不应该使用布尔值,而应该使用枚举:
enum Direction
{
Unknown,
Left,
Right
}因此,您可以将其初始化为unknown,并在代码中对其进行测试。
https://stackoverflow.com/questions/5869071
复制相似问题