下面的代碼使您可以使用箭頭鍵“?!痹谄聊簧系男【W格上四處走動。您曾經探索過的地方或附近的地方。即使我在第一次嘗試獲取按鍵之前已刷新一下,屏幕也不會首先顯示任何內容,直到您離開起始位置為止。難道不應該先顯示addstr之后再進行刷新,然后getch在那之后等待嗎?我什至嘗試添加一個stdscr.refresh(),但這也無濟于事。如何在等待第一次按鍵之前立即刷新屏幕?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貢獻1775條經驗 獲得超8個贊
stdscr.refresh()在movement.refresh()解決問題之前,先添加一些時間。
通過time.sleep(1)在refresh語句之后添加,它確實寫入屏幕,但隨后在stdscr.getch()調用時消失,但僅在第一次時消失??赡芘cstdscr的某種延遲初始化有關。
在stdscr.refresh()之后調用movement.refresh()會產生相同的效果:第一次通過循環會stdscr.refresh()清除屏幕,但不會在隨后的幾次通過循環。通過stdscr.refresh()在程序中盡早調用,可以使這種奇怪的第一次刷新不受影響。
添加回答
舉報
0/150
提交
取消
