2015-09-07 51 views
-2

我正在用C#开发一款游戏,并且陷入困境。所以背景一直在移动,这是通过一个定时器循环完成的,以确保背景一致移动。现在,我需要检查用户是否按空格键来移动播放器。我如何检查是否有keydown事件?我不能使用KeyDown事件子,因为游戏循环一直在工作,所以KeyDown事件子将不起作用。只是在这里寻找一些方向。谢谢!C#游戏循环中的KeyDown事件

+0

'tmrTick'上的'Interval'设置为?... –

+0

间隔设置为100 ms – user3587182

回答

1

在你的Tick事件,您可以检查你没有提供的任何代码

if (Keyboard.IsKeyDown(Key.Space)) 
{ 
    ... Do stuff 
} 
+0

“keyboard”关键字不起作用! – user3587182

+0

尝试使用大写的K?你正在使用哪个.Net框架版本,这应该从3.0版本开始提供。 –

+0

不要那样。目标.NET框架是4.5.2 – user3587182

0

只是猜测。

尝试在每个循环中调用Application.DoEvents();,并按照您的意愿使用KeyDown

编辑:

OK,这意味着您不使用游戏圈,但你有事件驱动的应用程序(通常的Windows应用程序)。拨打Application.DoEvents()可让窗口处理常规游戏循环中的所有回调(不是您的情况)。

我已经更新代码再次展示它是如何工作 - 我相信,通过实例学习好,但首先,你必须学会​​的基本知识(抱歉,但本场比赛是学习C#的太复杂了)...

private bool isKeyUpPressed; 
private void tmrTick_Tick(object sender, EventArgs e) { 
    if (isKeyUpPressed) 
    { 
     // move player up 
    } 
} 
private void Form1_KeyDown(object sender, KeyEventArgs b) { 
    isKeyUpPressed = b.KeyCode == Keys.Up; 
} 
+0

私人无效tmrTick_Tick(对象发件人,EventArgs的) { // backgroung移动... } 私人无效Form1_KeyDown(对象发件人,KeyEventArgs b) { //移动玩家最多 } 的Application.DoEvents();不会产生任何结果。代码没有任何错误,但没有给出结果 – user3587182

+0

IsKeyPressed会是什么样的变量? – user3587182

+0

当然是'bool'(通过分配比较值的结果来表示)。它将(很可能)是定义事件的同一班级的成员。 – Zoka