所以我试着这样做;如果敌人左侧位置超过平台右侧,则敌人转向另一侧,反之亦然。现在的问题是游戏突然无法识别它。这个敌人同时在空中跳跃,所以我只检查了X值。 (矩形的左右两侧)
这是代码:
这些检查是否在平台内......
static class RectangleHelper
{
public static bool isInsideOf(this Rectangle r1, Rectangle r2)
{
return (r1.Right >= r2.Left &&
r1.Left <= r2.Right);
}
}
if (!chompBall.rectangle.isInsideOf(platform.rectangle))
{
if (chompBall.movingRight == true && chompBall.canChangeDirection == true)
chompBall.movingRight = false;
else if (chompBall.movingRight == false && chompBall.canChangeDirection == true)
chompBall.movingRight = true;
chompBall.canChangeDirection = false;
}
我试图改变很多东西,甚至删掉了!看它是否有效,但没有。我不知道!有趣的是,当它总是触地(我的其他敌人)时它会起作用,但是现在只有X坐标很重要,但事实并非如此。
请帮忙!
- 编辑:
拆分逻辑?这是否意味着这样做?:
if (!chompBall.rectangle.isInsideOf(platform.rectangle) && chompBall.movingRight == true)
chompBall.movingRight = false;
else if (!chompBall.rectangle.isInsideOf(platform.rectangle) && chompBall.movingRight == false)
chompBall.movingRight = true;
-Edit 2: 哦,我想我知道你的意思。我在RectangleHelper上创建它,检查它是否在右边,反之亦然。它仍然不起作用,结果是一样的:
if (chompBall.rectangle.isRightOf(platform.rectangle) && chompBall.movingRight == true)
chompBall.movingRight = false;
else if (chompBall.rectangle.isLeftOf(platform.rectangle) && chompBall.movingRight == false)
chompBall.movingRight = true;
编辑3,敌人运动。正如你所看到的,这里使用的是“canChangeDirection bool。这是做的;当敌人到达平台的末端时,它会转动,直到100ms才能再次转动。这是用的,因此它不会卡在角落:
if (movingRight == true)
{
position.X += 2;
rotation += 0.05f;
}
else if (movingRight == false)
{
position.X -= 2;
rotation -= 0.05f;
}
if (canChangeDirection == false)
{
timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
if (timer >= 100)
{
canChangeDirection = true;
timer = 0;
}
}