下面的代碼使您可以使用箭頭鍵“?!痹谄聊簧系男【W(wǎng)格上四處走動(dòng)。您曾經(jīng)探索過的地方或附近的地方。即使我在第一次嘗試獲取按鍵之前已刷新一下,屏幕也不會(huì)首先顯示任何內(nèi)容,直到您離開起始位置為止。難道不應(yīng)該先顯示addstr之后再進(jìn)行刷新,然后getch在那之后等待嗎?我什至嘗試添加一個(gè)stdscr.refresh(),但這也無濟(jì)于事。如何在等待第一次按鍵之前立即刷新屏幕?import cursesdef start(stdscr): curses.curs_set(0) movement = curses.newpad(10, 10) cur_x, cur_y = 5, 5 while True: movement.addstr(cur_y, cur_x, '@') for (x_off, y_off) in [(-1,0),(1,0),(0,-1),(0,1)]: movement.addstr(cur_y + y_off, cur_x + x_off, '.') movement.refresh(1, 1, 0, 0, 7, 7) #Nothing is displayed until after the first key-stroke key_stroke = stdscr.getch() move_attempt = False if 0 < key_stroke < 256: key_stroke = chr(key_stroke) elif key_stroke == curses.KEY_UP and cur_y > 1: cur_y -= 1 elif key_stroke == curses.KEY_DOWN and cur_y < 8: cur_y += 1 elif key_stroke == curses.KEY_LEFT and cur_x > 1: cur_x -= 1 elif key_stroke == curses.KEY_RIGHT and cur_x < 8: cur_x += 1 else: passif __name__ == '__main__': curses.wrapper(start)
3 回答

www說
TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊
stdscr.refresh()
在movement.refresh()
解決問題之前,先添加一些時(shí)間。
通過time.sleep(1)
在refresh語句之后添加,它確實(shí)寫入屏幕,但隨后在stdscr.getch()
調(diào)用時(shí)消失,但僅在第一次時(shí)消失。可能與stdscr的某種延遲初始化有關(guān)。
在stdscr.refresh()
之后調(diào)用movement.refresh()
會(huì)產(chǎn)生相同的效果:第一次通過循環(huán)會(huì)stdscr.refresh()
清除屏幕,但不會(huì)在隨后的幾次通過循環(huán)。通過stdscr.refresh()
在程序中盡早調(diào)用,可以使這種奇怪的第一次刷新不受影響。

犯罪嫌疑人X
TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊
使用平板電腦時(shí),出于某種原因(我不知道為什么),您必須curses.doupdate
在調(diào)用平板電腦的之后打電話給refresh
。
添加回答
舉報(bào)
0/150
提交
取消