首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python / LibTCOD - libtcod.console_wait_for_keypress(True)为每个输入触发两次

Python / LibTCOD - libtcod.console_wait_for_keypress(True)为每个输入触发两次
EN

Stack Overflow用户
提问于 2012-11-27 21:11:59
回答 1查看 1.5K关注 0票数 2

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

代码语言:javascript
复制
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(),我应该做些什么

EN

回答 1

Stack Overflow用户

发布于 2012-11-28 03:00:09

它在最后一个svn中修复:http://doryen.eptalys.net/forum/index.php?topic=1500.msg8507#msg8507

或者在这里:https://bitbucket.org/jice/libtcod

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13585011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档