嘿我正在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的方式。
答案 0 :(得分:1)
正如@Mike McMahon建议的那样,你需要在你的碰撞部分做到这一点。
您没有在此处粘贴任何代码,但您需要检查播放器的边界矩形是否与其中一个地面瓷砖相交。如果是这样,您需要将hasJumped
设置为false
,因为他不再跳跃。
有一个名为Platformer
的好示例,您可以在其中看到此行为是如何完成的。我建议你下载它。 (Link here)