2014-07-25 40 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