python curses tty screen blink

MoS*_*oSt 5 python curses tty

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

例如,屏幕字段:

self.screen = curses.newwin(80, 24, 0, 0)
Run Code Online (Sandbox Code Playgroud)

主循环:

def loop(self):
    while True:
        self.events()
        self.update()
        self.render()
Run Code Online (Sandbox Code Playgroud)

渲染:(https://github.com/pankshok/xoinvader/blob/master/xoi.py#L175)

self.screen.clear()
#draw some characters    
self.screen.refresh()
time.sleep(0.03)
Run Code Online (Sandbox Code Playgroud)

睡眠功能的恒定时间是暂时的,直到我写入60个渲染调用控制器.

如何正确实现渲染方法?

保罗先生,谢谢.

Ros*_*dge 15

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

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