初始化bool会干扰我的逻辑
本文关键字:我的 干扰 bool 初始化 | 更新日期: 2023-09-27 17:54:17
我正在研究这种处理碰撞检测的方法。我有一个问题,方向bool被初始化为真。有时,当触发一个对象时,角度会反过来,因为它期望bool值为假。
如果对象最初指向左边(在我的代码中介于0和350之间),bool值应该为真。如果它的目标是向右(在350和700之间),则bool值应为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;
}
在移动气泡之前必须检查它的位置。如果你把它放在移动结束的位置,你可能会超出屏幕的范围。
解释我的意思
我看到你在这里做的是:
- 寻找你的方向将要移动
- 移动气泡
- 检查气泡是否必须改变方向
在我看来,你要做的是
- 检查跟随方向
- 移动气泡
当你开始另一个移动时,你将检查气泡的方向
我想说你不应该使用布尔值,而应该使用enum:
enum Direction
{
Unknown,
Left,
Right
}
所以你可以初始化它为unknown并在你的代码中测试它