我正在编写一个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个渲染调用控制器。
如何正确实现渲染方法?
提前致谢, 保罗。
答案 0 :(得分:15)
请勿致电clear
清除屏幕,而是使用erase
。使用clear
设置一个标志,这样当你调用refresh
时,它所做的第一件事就是清除终端的屏幕。这是导致终端屏幕显示闪烁的原因。用户看到旧屏幕,然后是完全空白的屏幕,然后是新屏幕。如果您使用erase
,则会改为将旧屏幕修改为新屏幕。
您可能仍会在慢速终端上看到一些奇怪的闪烁或其他瑕疵。尝试调用screen.idcok(False)
和screen.idlok(False)
来阻止curses使用插入和删除操作来更新屏幕。