2014-07-25 41 views
4

我正在寫一個python curses遊戲(https://github.com/pankshok/xoinvader)。 我發現一個問題:在終端模擬器,它工作正常,但在tty屏幕閃爍。 我試圖使用curses.flash(),但它變得更糟。python curses tty screen blink

例如,屏幕字段:

self.screen = curses.newwin(80, 24, 0, 0) 

主迴路:

def loop(self): 
    while True: 
     self.events() 
     self.update() 
     self.render() 

呈現:(https://github.com/pankshok/xoinvader/blob/master/xoi.py#L175

self.screen.clear() 
#draw some characters  
self.screen.refresh() 
time.sleep(0.03) 
在睡眠功能

恆定時間是暫時的,直到我寫60個呈現呼叫控制器。

如何正確實現渲染方法?

在此先感謝, 保羅。

回答

12

不要撥打clear來清除屏幕,而應使用erase。使用clear會設置一個標誌,以便當您撥打refresh時,它所做的第一件事就是清除終端屏幕。這是導致終端屏幕閃爍的原因。用戶看到舊屏幕,然後看到一個完全空白的屏幕,然後看到你的新屏幕。如果您使用erase,那麼它會修改舊屏幕使其看起來像新的屏幕。

在緩慢的終端上,您仍然可能會看到一些奇怪的閃爍或其他工件。嘗試撥打screen.idcok(False)screen.idlok(False)停止使用插入和刪除操作來更新屏幕。

+1

是的,它的工作原理,謝謝!) – MoSt