2013-07-31 43 views
1

我目前正在進行射擊遊戲。在那我拍攝的數量是固定的。但我喜歡根據某人按下鍵盤鍵的時間長短來使其變化。如果長時間按下按鍵,則應該產生更多的電力。xna充電按鍵按下的時間長度

這是我的代碼。

 { 
      // Create projectile 
      worldEntities.Add(new Sphere(GraphicsDevice, 0.1f, 0.2f, Character.EyePosition() + Character.LookTowards(), 0.8f, Color.Blue)); 
      // Add gravity to projectile 
      (worldEntities[worldEntities.Count - 1] as RigidBody).Acceleration = new Vector3(0f, -10f, 0f); 

      // Calculate launch velocity 
      Vector3 launchVelocity = Character.LookTowards() * 10f; 


      // Set particle velocity to launch velocity 
      (worldEntities[worldEntities.Count - 1] as RigidBody).Velocity = launchVelocity; 

      // Reset timer 
      timer = 1f; 
     } 
+1

問題在哪?保存鍵被按下的時間並在釋放時計算與當前時間的差值。用這個差值和常數乘以速度。 –

回答

1

有你的能量倍增器的變量,這將導致你的速度是在第一次按0%和100%時,它已經舉辦下來的最長時間

float power; 
const float maxTime = 1000; //1 second 

在你你需要檢查的更新方法是按下鍵並添加自上一幀以來的經過時間。

if (KeyBoard.GetState().IsKeyDown(Keys.Space)) 
    power += (float)gameTime.ElapsedGameTime.TotalMilliseconds; 

我們還需要檢查電源是否達到最大功率並拍攝。

if (power >= maxTime) 
    //Fire! 

此外,另一種情況下,在用戶放火之前放開鑰匙。 (lastKeyboardState是最後一幀的狀態,只需在每幀結束時將其設置爲KeyBoard.GetState())

if (lastKeyboardState.IsKeyDown(Keys.Space) && !currentKeyboardState.IsKeyDown(Keys.Space) 
{ 
//Fire, but without full power 
}