跳转只会发生一次

时间:2013-12-19 18:34:57

标签: c# xna

嘿我正在XNA做游戏,游戏基于玩家的跳跃能力。我遇到了很多问题,但最麻烦的是当我跳的时候我只能这样做,因为它只会发生在hasJumped = false但是我无法弄清楚放在哪里它。我有一个楼层,我试图做一个功能,说如果玩家触摸地板设置为假,但我不能让它工作。 hasJumped在构造函数中默认为false。

有人可以帮我吗?

this.Transform.MoveIncrement = Vector2.Zero;
float timeBetweenUpdates = 0.25f * gameTime.ElapsedGameTime.Milliseconds;

if (game.KeyboardManager.isKeyDown(Keys.Left))
{
   this.Transform.MoveIncrement += -this.Transform.Look * timeBetweenUpdates;
   this.Transform.IsMoved = true;
}
if (game.KeyboardManager.isKeyDown(Keys.Right))
{
   this.Transform.MoveIncrement += this.Transform.Look * timeBetweenUpdates;
   this.Transform.IsMoved = true;
}
if (game.KeyboardManager.isKeyDown(Keys.Up) && hasJumped == false)
{
   this.Transform.moveBy(-Vector2.UnitY * 400);
   this.Transform.IsMoved = true;
   hasJumped = true;
}
if (hasJumped == true)
{
   this.Transform.MoveIncrement = Vector2.UnitY * timeBetweenUpdates;
   this.Transform.IsMoved = true;
   // hasJumped = false;
}
if (hasJumped == false)
{
   // Transform.MoveIncrement = new Vector2(0, 0);
   // Transform.IsMoved = false;
}

我将此添加到我的碰撞类中以解决此问题。

 PlayerSprite pSprite = (PlayerSprite)collider;
            if((collidee is WallSprite) && (collider is PlayerSprite ))
            {
                pSprite.hasJumped = false;
            }

Collidee和Collider是精灵,这就是我把它投射到PlayerSprite的方式。

1 个答案:

答案 0 :(得分:1)

正如@Mike McMahon建议的那样,你需要在你的碰撞部分做到这一点。

您没有在此处粘贴任何代码,但您需要检查播放器的边界矩形是否与其中一个地面瓷砖相交。如果是这样,您需要将hasJumped设置为false,因为他不再跳跃。

有一个名为Platformer的好示例,您可以在其中看到此行为是如何完成的。我建议你下载它。 (Link here)