gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:34:12 24 4
gpt4 key购买 nike

我正在浏览 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”变量中,以便我可以对其使用react。所有其他输入都应该被刷新。然后主循环的新迭代再次调用 console_wait_for_keypress(True),它应该等待新的输入,等等。相反,console_wait_for_keypress(True) 的每两次迭代都会触发,而无需等待新的输入。

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

老实说,我对此感到难过。简单地按住方向按钮似乎不会产生“didnt-take-turn”输出,但该功能应该用于单次按键。延迟不能太短,因为正常的按键总是会产生恰好两个输出。 libtcod 文档无法帮助我。

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

最佳答案

关于Python/LibTCOD - libtcod.console_wait_for_keypress(True) 为每个输入触发两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13585011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com