2016-12-31 21 views
0

私はUWP用の単純な2Dゲームエンジンを作成しています。 XNAからコードスニペットを取り出し、特定のキーが押されているかどうかを確認します(下記参照)。私は同様のことをしようとしています。UWPのイベントなしで押されたキーの検出

実際、私のゲームエンジンでは専用のイベントハンドラ(KeyDownなど)を使用するのではなく、ゲームループで押されたキーを確認するだけです。このための1つの理由は、例えば、タイマーとMODを使用してキーが連続的に押された場合に弾丸がどれほど頻繁に発砲するかを制御することができるということです。同じキーを使用している別のプレイヤーがキーAとWを使用してキャラクターを別の方向に移動させている間に、彼らは時々両方のレーザー銃を発射する。最後に、私は他のゲームコードとは別に動作するイベントハンドラを使用することを常に考えてきました。その結果、コントロールが不足していました。これはKeyPressイベントで特に当てはまると思います。

私が発見したコードは次のようになります。

public void DrawHelp() 
     { 
      if (Keyboard.GetState().IsKeyDown(Keys.Tab)) 
      { 

..andこれは私が使用しようとしているものです。しかし、Keyboardクラスの単語はIntellisenseには出てこない(Windows.UI.Xaml.Input;がデフォルトで添付されているが)。

(コードが間違っている - それはちょうど私が欲しいものを表示するようだ)基本的にはif文のシリーズです私は何の考えていること:

だから、
int counter = 0; 

    // Raised every tick while the DispatcherTimer is active. 
    private void EachTick(object sender, object e) 
    { 
     TrackKeyboard(); 
     CalculateMoves(); 
     Physics.CollisionDetection(); 
     DrawGame(); 
    } 

    private void TrackKeyboard() 
    { 
     if (Keyboard.GetState().IsKeyDown(Keys.P)) PauseGame(); 

     if (counter % 10 == 0) //control movements 
     { 
      if (Keyboard.GetState().IsKeyDown(Keys.Down)) AddSpeed("Player1", 0, -1); 
      if (Keyboard.GetState().IsKeyDown(Keys.Left)) AddSpeed("Player1", -1, 0); 
      if (Keyboard.GetState().IsKeyDown(Keys.Up)) AddSpeed("Player1", -1, 0); 
      if (Keyboard.GetState().IsKeyDown(Keys.Right)) AddSpeed("Player1", 0, 1); 
      if (Keyboard.GetState().IsKeyDown(Keys.W)) AddSpeed("Player2", -1, 0); 
      if (Keyboard.GetState().IsKeyDown(Keys.D)) AddSpeed("Player2", 0, 1); 
      if (Keyboard.GetState().IsKeyDown(Keys.S)) AddSpeed("Player2", -1, 0); 
      if (Keyboard.GetState().IsKeyDown(Keys.A)) AddSpeed("Player2", 0, 1); 
     } 

     if (counter % 5 == 0) //fire 
     { 
      if (Keyboard.GetState().IsKeyDown(Keys.Space)) Fire("Player1"); 
      if (Keyboard.GetState().IsKeyDown(Keys.X)) Fire("Player2"); 
     } 
    } 

、それはこの中のようなものを書くことが可能ですUWP、およびもしそうなら:どのように?

私はこれについてBingとGoogleで検索しましたが、まだUWPに関する情報はほとんどありません。

私はCodeProject(https://www.codeproject.com/Questions/1107441/How-do-I-register-events-from-two-players-in-UWP)で同様の質問を見つけましたが、答えはあまりにも難しく、いずれにせよ、私は上記のようにゲームループにこのコードを含めることをお勧めします。

(また、私が取るしようとしているルートは私が認識しないかもしれないいくつかの技術的な理由のために愚かであるなら、私に知らせてください。)

ありがとうとハッピーニューイヤー!

UWPでペター

答えて

1

、あなたはこれらのメソッドを使用してCoreWindowからキーの状態を確認してください:

Window.Current.CoreWindow.GetKeyState(VirtualKey).HasFlag(CoreVirtualKeyStates); 

は、あなたがこのような例についての情報を取得したいキーと状態を指定する必要があります。

if(Window.Current.CoreWindow.GetKeyState(VirtualKey.Escape).HasFlag(CoreVirtualKeyStates.Down)) 
{ 
    // Escape key pressed 
} 

にのみ、このようなGetKeyStateメソッドから返された値比較を行うべきではない:

0123を
Window.Current.CoreWindow.GetKeyState(VirtualKey) == CoreVirtualKeyStates.Down; 

キーが押されると条件がその後、falseになりますとき、それはCoreVirtualKeyStates.Down | CoreVirtualKeyStates.Lockedを返す可能性があるため。

+1

ご返信ありがとうございました。私は試してみる機会があるときに答えを評価します。 – user2040543

+0

もう一度、申し訳ありませんが、おそらく愚かな音ですが、私はこれがどのようにキーを見つけることにまで沸騰するかはわかりません。より完全な例やポインタへのポインタのためにあなたを困らせてもらえますか? – user2040543

+0

@ user2040543私は –