2012-04-03 8 views
1

私はXNAでWSADを使ってスプライトを動かす簡単なゲームを書いています。問題は、同じ方向の2つのキーが同時に押された場合、動きがキャンセルされ、文字が動かないことです。これを避けるために解放するキーを手動で設定することは可能ですか?ここでは、キーの動きコードは次のとおりです。XNAは公開鍵を設定しましたか?

if (newKeyState.IsKeyDown(Keys.W)) 
{ 
    position.Y -= vel; 
} 
if (newKeyState.IsKeyDown(Keys.S)) 
{ 
    position.Y += vel; 
} 
if (newKeyState.IsKeyDown(Keys.A)) 
{ 
    position.X -= vel; 
} 
if (newKeyState.IsKeyDown(Keys.D)) 
{ 
    position.X += vel; 
} 

答えて

1

は、それが手動でこの問題を回避するためにリリースするキーを設定することは可能ですか?

いいえ。しかし、あなたはelse-ifに変更することができます。この場合、W & & Sが押された場合、Wだけがカウントされます。どのキーが最初にチェックされるかを変更することでこれを変更することができます。

if (newKeyState.IsKeyDown(Keys.W)) { 
    position.Y -= vel; 
} else if (newKeyState.IsKeyDown(Keys.S)) { 
    position.Y += vel; 
} else if (newKeyState.IsKeyDown(Keys.A)) { 
    position.X -= vel; 
} else if (newKeyState.IsKeyDown(Keys.D)) { 
    position.X += vel; 
} 

各軸の一方向のみを移動したい場合は、

if (newKeyState.IsKeyDown(Keys.W)) { 
    position.Y -= vel; 
} else if (newKeyState.IsKeyDown(Keys.S)) { 
    position.Y += vel; 
} 

if (newKeyState.IsKeyDown(Keys.A)) { 
    position.X -= vel; 
} else if (newKeyState.IsKeyDown(Keys.D)) { 
    position.X += vel; 
} 
1

キーの状態(あなたの上記のコードでnewKeyState)は、キーボードの実際の物理的な状態を表しているので、ユーザーはまだそれを押しているときにリリースするキーの状態を設定することが可能でも望ましくもないのです。ただし、希望の最終結果を得るためのいくつかの選択肢があります。

1)コードを再構成することができます。

if(newKeyState.IsKeyDown(Keys.W)) 
{ 
    position.Y -= vel; 
} 
else if(newKeyState.IsKeyDown(Keys.S)) 
{ 
    position.Y += vel; 
} 
// etc. 

2)あなたは、あなた自身の状態(newKeyStateのすなわち、キャッシュされたバージョン)を維持し、その中に発売さにキーを設定することができます。

関連する問題