libtcod/Python:使用sys\u check\u for\u event而不是sys\u wait\u for\u even通过屋顶使用CPU

2024-04-25 19:30:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用CFFI port of libtcod在python3中构建一个游戏。你知道吗

使用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中有一个bug:它返回除鼠标移动以外的所有事件。我通过查看mouse对象中的(x, y)坐标来测试这一点-即使这些数字改变,方法的输出仍然0,即没有事件。你知道吗


Tags: 方法key用户event游戏forchecksys

热门问题