python curses tty screen blink

时间:2014-07-25 21:41:34

标签: python curses tty

我正在编写一个python curses游戏(https://github.com/pankshok/xoinvader)。 我发现了一个问题:在终端模拟器中它工作正常,但在tty屏幕闪烁。 我试图使用curses.flash(),但情况更糟。

例如,屏幕字段:

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个渲染调用控制器。

如何正确实现渲染方法?

提前致谢, 保罗。

1 个答案:

答案 0 :(得分:15)

请勿致电clear清除屏幕,而是使用erase。使用clear设置一个标志,这样当你调用refresh时,它所做的第一件事就是清除终端的屏幕。这是导致终端屏幕显示闪烁的原因。用户看到旧屏幕,然后是完全空白的屏幕,然后是新屏幕。如果您使用erase,则会改为将旧屏幕修改为新屏幕。

您可能仍会在慢速终端上看到一些奇怪的闪烁或其他瑕疵。尝试调用screen.idcok(False)screen.idlok(False)来阻止curses使用插入和删除操作来更新屏幕。