【问题标题】:Python / LibTCOD - libtcod.console_wait_for_keypress(True) triggering twice for each inputPython / LibTCOD - libtcod.console_wait_for_keypress(True) 为每个输入触发两次
【发布时间】:2012-11-27 13:11:59
【问题描述】:

我正在查看Roguebasin python/libtcod roguelike tutorial。我遇到的问题是,每次调用key = libtcod.console_wait_for_keypress(True) 时,主循环都不会触发一次,而是触发两次。处理键盘输入的代码如下:

def handle_keys():
    #key = libtcod.console_check_for_keypress()  #real-time
    key = libtcod.console_wait_for_keypress(True)  #turn-based

    if key.vk == libtcod.KEY_ENTER and key.lalt:
        #Alt+Enter: toggle fullscreen
        libtcod.console_set_fullscreen(not libtcod.console_is_fullscreen())

    elif key.vk == libtcod.KEY_ESCAPE:
        return 'exit'  #exit game

    if game_state == 'playing':
        #movement keys
        if libtcod.console_is_key_pressed(libtcod.KEY_UP):
            player_move_or_attack(0, -1)

        elif libtcod.console_is_key_pressed(libtcod.KEY_DOWN):
            player_move_or_attack(0, 1)

        elif libtcod.console_is_key_pressed(libtcod.KEY_LEFT):
            player_move_or_attack(-1, 0)

        elif libtcod.console_is_key_pressed(libtcod.KEY_RIGHT):
            player_move_or_attack(1, 0)

        else:
            return 'didnt-take-turn'

代码从教程的this 部分逐字提取(除了额外的四个空格缩进)。请注意,该页面上有两个代码版本。我写了自己的版本,但即使直接复制/粘贴,我也会遇到问题。据我所知,这个问题贯穿了整个教程。

console_wait_for_keypress(True) 应该等待一个键并将其放入“key”变量中,这样我就可以对其做出反应。所有其他输入都应该被刷新。然后主循环的新迭代再次调用console_wait_for_keypress(True),它应该等待新的输入,依此类推。相反,console_wait_for_keypress(True) 的每第二次迭代都会触发,而无需等待新的输入。

游戏实际上运行良好,因为第二个输入不会触发任何console_is_key_pressed() 条件,并且handle_keys() 函数返回'didnt-take-turn',它告诉游戏逻辑什么都不做。这仍然意味着对于每个周期,都会花费两个,这不是所需的行为。如果您在每个周期都打印handle_keys() 的结果,则问题很容易观察到。它在“None”和“didnt-take-turn”之间交替。

老实说,我对此感到困惑。简单地按住一个方向按钮似乎不会产生'didnt-take-turn'输出,但该功能应该用于单个按键。延迟不能太短,因为正常的按键总是会产生两个输出。 libtcod 文档对我没有帮助。

我应该怎么做才能使单个击键仅触发单个console_wait_for_keypress()

【问题讨论】:

    标签: python keyboard roguelike libtcod


    【解决方案1】:

    【讨论】:

    • 啊,所以它被窃听了。谢谢你。我想无论如何我都会切换到 wait_for_event,但我现在知道代码没有任何问题。您的帮助非常好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多