Python Curses TTY 屏幕闪烁

11
我正在编写一个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个回答

29
不要使用clear来清除屏幕,改用erase。使用clear会设置一个标志,以便在调用refresh时,第一件事就是清空终端的屏幕。这就是导致终端屏幕出现闪烁的原因。用户先看到旧屏幕,然后是完全空白的屏幕,最后才是您的新屏幕。如果使用erase,则会修改旧屏幕,使其看起来像新的一样。
在较慢的终端上仍可能会看到一些奇怪的闪烁或其他伪影。尝试调用screen.idcok(False)screen.idlok(False),以阻止curses使用插入和删除操作来更新屏幕。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接