我正在爲UWP編寫一個簡單的2D遊戲引擎。我有一個從XNA獲取的代碼片段,檢查是否按下了某個鍵(見下文),並且我正在嘗試做類似的事情。事實上,在我的遊戲引擎中,我寧願不使用專用事件處理程序(KeyDown等),而只是在我的遊戲循環中檢查按下的鍵 - 如果可以的話。其中一個原因是,我可以控制例如如果持續按下按鍵(使用計時器和模組),子彈發生的頻率。它也可以讓按鍵相互獨立,例如向上和向右箭頭鍵爲玩家1提供對角線移動,而另一位玩家(使用相同的鍵盤)則使用按鍵A和W在另一個方向移動他/她的角色,並且他們偶爾會發射激光槍。最後,我一直考慮使用事件處理程序與我的其他遊戲代碼分開工作,導致缺乏控制。我認爲,KeyPress活動尤其如此。在UWP中檢測沒有事件的按鍵
的代碼,我發現是這樣的:
public void DrawHelp()
{
if (Keyboard.GetState().IsKeyDown(Keys.Tab))
{
..和這就是我想要使用。但是,對於我來說,Intellisense中沒有出現鍵盤類單詞(儘管Windows.UI.Xaml.Input; using是默認附加的)。
我在想什麼的基本上是一系列的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和谷歌上搜索了一些這方面的內容,但UWP上的信息還很少。
我在CodeProject上發現了一個類似的問題(https://www.codeproject.com/Questions/1107441/How-do-I-register-events-from-two-players-in-UWP),但答案對我來說太難了,無論如何,我寧願將這些代碼包含在遊戲循環中,如上所述。
(也請讓我知道如果我想要走的路線是愚蠢的一些技術原因,我可能不知道的。)
非常感謝和新年快樂!
皮特
非常感謝您的詳細回覆。當我有機會嘗試時,我會給答案評分。 – user2040543
你好,對不起,也許聽起來很愚蠢,但我不明白這是如何歸結爲找到特別的關鍵。請問您能否給我一個更完整的例子或指向一個指針? – user2040543
@ user2040543我已經添加了一個示例 –