【发布时间】:2016-12-31 21:18:44
【问题描述】:
我正在为 UWP 编写一个简单的 2D 游戏引擎。我有一个取自 XNA 的代码 sn-p,检查是否按下了某个键(见下文),我正在尝试做类似的事情。
确实,在我的游戏引擎中,我宁愿不使用专用的事件处理程序(KeyDown 等),而是简单地检查我的游戏循环中的按键 - 如果可以的话。这样做的一个原因是我可以控制例如,如果连续按下键(使用计时器和模块),子弹发射的频率。它还可以让按键相互独立,例如向上和向右箭头键为玩家 1 提供对角线移动,而另一个玩家(使用相同的键盘)使用 A 和 W 键将他/她的角色向另一个方向移动,他们俩偶尔会发射激光枪。最后,我一直考虑使用与我的其余游戏代码分开工作的事件处理程序,导致缺乏控制。我认为 KeyPress 事件尤其如此。
我找到的代码是这样的:
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 和 Google 上进行了一些搜索,但关于 UWP 的信息仍然很少。
我在 CodeProject (https://www.codeproject.com/Questions/1107441/How-do-I-register-events-from-two-players-in-UWP) 上发现了一个类似的问题,但答案对我来说太难理解了,无论如何,我宁愿将这段代码包含在游戏循环中,如上所述。
(如果由于某些我可能不知道的技术原因,我尝试采取的路线是愚蠢的,请告诉我。)
非常感谢,新年快乐!
彼得
【问题讨论】: