2013-12-19 69 views
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。

+0

您需要檢查碰撞情況,當您的玩家碰撞地板時,您需要將hasJumped布爾值設置爲false。角色和表面之間相當簡單的盒子碰撞會告訴你。您需要確保盒子與您的精靈腳部吻合,否則與平臺的碰撞可能會重置布爾值,並且在玩家尚未能完成時允許雙跳。 –

+1

http://www.gameprogrammingpatterns.com/state.html < - 使用狀態模式的一個特別好的例子。 –

回答

1

正如@Mike McMahon所建議的那樣,您需要在碰撞部分執行此操作。

你沒有在這裏粘貼任何代碼,但你需要檢查你的玩家的邊界矩形是否與你的地面磚相交。如果是這樣,你需要設置你的hasJumped等於false,因爲他不再跳。

有一個很好的例子叫做Platformer你可以看到這個行爲是如何完成的。我建議你下載它。 (Link here)