我正在使用 libtcod 的CFFI 端口在 Python 3 中构建游戏。
使用该方法处理用户输入非常有效sys_wait_for_event
(立即捕获键盘和鼠标事件),但是这阻止了我使游戏成为实时,因为该方法仅在用户执行某些操作时返回事件,而不是在我希望游戏执行时(例如)移动敌人。
我可以切换到,sys_check_for_event
但不知何故,这会将 CPU 使用率提高到 100%,并且似乎无法捕获鼠标移动。就好像它过于频繁地检查事件一样。试图通过调用每个循环来减慢它time.sleep
也不起作用。
我使用以下代码:
import tcod
tcod.console_set_custom_font('terminal16x16_gs_ro.png',
tcod.FONT_TYPE_GREYSCALE | tcod.FONT_LAYOUT_ASCII_INROW)
cod.console_init_root(40, 40, 'My game', False)
tcod.sys_set_fps(60)
key = tcod.Key()
mouse = tcod.Mouse()
while not tcod.console_is_window_closed():
# listen for user input, which sends CPU usage to 100%
event = tcod.sys_check_for_event(tcod.EVENT_KEY_PRESS | tcod.EVENT_MOUSE, key, mouse)
# do stuff
some_handling_method(key, mouse)
# flush consoles to the window
tcod.console_flush()
我该如何解决这个问题 -
有没有办法使用
sys_wait_for_event
直到一段时间过去,之后我可以让游戏在没有用户输入的情况下更新其状态,有什么问题吗
sys_check_for_event
或我用错了吗?
谢谢!
更新我认为有一个错误sys_check_for_event
:它返回除鼠标移动之外的所有事件。我通过查看对象中的(x, y)
坐标对此进行了测试mouse
——即使这些数字发生变化,该方法的输出仍然保持不变,0
即没有事件。