1
嘿,我在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;
}
我將此添加到我的Collision類來解決此問題。
PlayerSprite pSprite = (PlayerSprite)collider;
if((collidee is WallSprite) && (collider is PlayerSprite))
{
pSprite.hasJumped = false;
}
碰撞和對撞機是精靈這是我如何將其投入PlayerSprite。
您需要檢查碰撞情況,當您的玩家碰撞地板時,您需要將hasJumped布爾值設置爲false。角色和表面之間相當簡單的盒子碰撞會告訴你。您需要確保盒子與您的精靈腳部吻合,否則與平臺的碰撞可能會重置布爾值,並且在玩家尚未能完成時允許雙跳。 –
http://www.gameprogrammingpatterns.com/state.html < - 使用狀態模式的一個特別好的例子。 –