我很难理解window.timeout((函数。更具体地说,我正在玩一个python中的"蛇"游戏:
s = curses.initscr()
curses.curs_set(0)
w = curses.newwin()
w.timeout(100)
while True:
move snake until it hits the wall
我知道在这种情况下,timeout(100(决定了蛇"移动"的速度,即在屏幕上打印出新字符。但是,当我想修改代码以便它等到有人按下"开始"时,我卡住了。我写了这样的东西:
w.timeout(100)
while True:
if w.getch() is not start:
stay at the initial screen
else:
while True:
move the snake until it hits the wall
但是,在这种情况下,timeout(100( 似乎控制程序每次等待 w.getch(( 的时间,而不是每次蛇移动之间等待多长时间。另外,我注意到在第一个示例中,超时是在 while 循环之外的顶部声明的。这对我来说看起来很奇怪,因为通常如果我想暂停 while 循环,我会将 sleep(( 放在 while 循环的底部。
蛇的移动之间暂停,你可以使用napms
等待给定的毫秒数(与sleep
不同,不会干扰屏幕更新(。 将w.timeout
设置为 100(毫秒(可能太长。 如果您不关心读取功能键,则可以使用 nodelay
将w.getch
设置为非阻塞,依靠napms
来减慢循环速度。
关于后续注释:在 ncurses 中,wtimeout
函数设置一个名为 _delay
的窗口属性,该属性在 getch
函数内起作用,最终传递给定时等待函数,如果有数据要读取,该函数将提前返回。