我正在用C#开发一款游戏,并且陷入困境。所以背景一直在移动,这是通过一个定时器循环完成的,以确保背景一致移动。现在,我需要检查用户是否按空格键来移动播放器。我如何检查是否有keydown事件?我不能使用KeyDown事件子,因为游戏循环一直在工作,所以KeyDown事件子将不起作用。只是在这里寻找一些方向。谢谢!C#游戏循环中的KeyDown事件
回答
在你的Tick事件,您可以检查你没有提供的任何代码
if (Keyboard.IsKeyDown(Key.Space))
{
... Do stuff
}
“keyboard”关键字不起作用! – user3587182
尝试使用大写的K?你正在使用哪个.Net框架版本,这应该从3.0版本开始提供。 –
不要那样。目标.NET框架是4.5.2 – user3587182
只是猜测。
尝试在每个循环中调用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;
}
私人无效tmrTick_Tick(对象发件人,EventArgs的) { // backgroung移动... } 私人无效Form1_KeyDown(对象发件人,KeyEventArgs b) { //移动玩家最多 } 的Application.DoEvents();不会产生任何结果。代码没有任何错误,但没有给出结果 – user3587182
IsKeyPressed会是什么样的变量? – user3587182
当然是'bool'(通过分配比较值的结果来表示)。它将(很可能)是定义事件的同一班级的成员。 – Zoka
- 1. 游戏不会停止事件循环
- 2. 游戏循环事件监听
- 3. 定时事件和requestAnimationFrame游戏循环
- 4. 回合制游戏设计:事件驱动vs.游戏循环
- 5. SFML重复事件循环每次游戏循环3次
- 6. 回合制游戏的游戏循环
- 7. C#简单的2D游戏 - 制作基本的游戏循环
- 8. JAVA游戏循环?
- 9. Win32游戏循环
- 10. Javascript游戏循环
- 11. 在游戏循环
- 12. BlackJack游戏循环
- 13. 简单的游戏循环与C++
- 14. Lua,游戏状态和游戏循环
- 15. 文字游戏 - 游戏循环
- 16. 简单的游戏循环不循环?
- 17. 游戏循环的问题
- 18. turbo c猜谜游戏do/while循环
- 19. 麻烦循环.C++简单游戏
- 20. For循环猜谜游戏C
- 21. C#GDI游戏循环(FPS计数器)
- 22. C#游戏循环和输入
- 23. 如何在主游戏循环中处理关键事件?
- 24. 可以在X11事件循环中捕获游戏杆/游戏手柄事件吗?
- 25. 游戏循环中的滞后随着游戏的进展
- 26. 游戏开发中的摇摆:游戏循环
- 27. 游戏循环中游戏对象的设计模式
- 28. ActionScript 3中的游戏逻辑和游戏循环
- 29. 在Android游戏中放置主游戏循环的位置
- 30. 游戏主循环逻辑
'tmrTick'上的'Interval'设置为?... –
间隔设置为100 ms – user3587182