你是依靠鍵盤控制器上,當你按住它重複鍵。當您按另一個鍵時,該功能停止工作。這需要不同的方法。
首先,您需要一個枚舉值,用於指示太空船的運動狀態,例如NotMoving,MovingLeft和MovingRight。將該類型的變量添加到您的類中。您將需要KeyDown 和 KeyUp事件。當你得到一個KeyDown,例如Keys.Left,然後將該變量設置爲MovingLeft。當你得到Keys.Left的KeyUp事件時,首先檢查狀態變量是否仍然是MovingLeft,如果是,則將其更改爲NotMoving。
在你的遊戲循環中,使用變量值來移動飛船。一些示例代碼:
private enum ShipMotionState { NotMoving, MovingLeft, MovingRight };
private ShipMotionState shipMotion = ShipMotionState.NotMoving;
protected override void OnKeyDown(KeyEventArgs e) {
if (e.KeyData == Keys.Left) shipMotion = ShipMotionState.MovingLeft;
if (e.KeyData == Keys.Right) shipMotion = ShipMotionState.MovingRight;
base.OnKeyDown(e);
}
protected override void OnKeyUp(KeyEventArgs e) {
if ((e.KeyData == Keys.Left && shipMotion == ShipMotionState.MovingLeft) ||
(e.KeyData == Keys.Right && shipMotion == ShipMotionState.MovingRight) {
shipMotion = ShipMotionState.NotMoving;
}
base.OnKeyUp(e);
}
private void GameLoop_Tick(object sender, EventArgs e) {
if (shipMotion == ShipMotionState.MovingLeft) spaceShip.MoveLeft();
if (shipMotion == ShipMotionState.MovingRight) spaceShip.MoveRight();
// etc..
}
除非必要,否則您應該使用XNA或DirectX或其他替代品來製作遊戲和圖形應用程序,而不是WinForms。他們不會變得過於活躍,你會在路上碰到很多障礙。 XNA的例子有一個鍵盤類,像IsKeyDown這樣的方法,所以它可以爲您節省很多時間。 – 2012-04-08 15:09:35
感謝您在未來的重播mybee,當我感覺更舒適時,我將轉移到XNA。 – samy 2012-04-08 15:31:27