1

我正在使用 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即没有事件。

4

0 回答 0