python проклинает tty экран мигает

Я пишу игру про проклятия Python (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 вызовов рендеринга.

Как правильно реализовать метод рендеринга?

Заранее спасибо, Пол.


person MoSt    schedule 25.07.2014    source источник


Ответы (1)


Не вызывайте clear, чтобы очистить экран, используйте вместо этого erase. Использование clear устанавливает флаг, так что когда вы вызываете refresh, первое, что он делает, это очищает экран терминала. Это то, что заставляет экран терминала мигать. Пользователь видит старый экран, затем полностью пустой экран, затем ваш новый экран. Если вы используете erase, он вместо этого изменит старый экран, чтобы он выглядел как новый.

Вы по-прежнему можете видеть некоторые странные мигания или другие артефакты на медленных терминалах. Попробуйте вызвать screen.idcok(False) и screen.idlok(False), чтобы запретить curses использовать операции вставки и удаления для обновления экрана.

person Ross Ridge    schedule 26.07.2014