我正在研究这种处理碰撞检测的方法。我有一个方向bool被初始化为true的问题。有时,当射击一个物体时,角度是相反的,因为它期望bool是假的。
如果对象最初瞄准左侧(在我的代码中介于0和350之间),则bool应为true。如果它是针对右边(350到700之间),那么bool应该是假的。
如何在不干扰后续碰撞检测的情况下将初始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;
}
答案 0 :(得分:1)
我会说你不应该使用布尔值,而应该使用枚举:
enum Direction
{
Unknown,
Left,
Right
}
因此,您可以将其初始化为未知并在代码中对其进行测试。
答案 1 :(得分:1)
在移动气泡之前,您必须检查气泡的位置。在移动结束时你拥有它的位置,你可能超出了屏幕的范围。
解释我的意思
我看到你在这里做的是:
在mi意见中,你要做的是
当你开始另一个动作时,你将检查气泡必须采取的方向