Python Turtle Dot мигает без причины

В моей программе для имитации движения добавляется позиция x точки, старая точка очищается и рисуется новая.

def drawing_zombies():
  clear()
  for zombie in zombies:
    goto(zombie.x, zombie.y)
    dot(20, 'red')
  update()

def movement():
  for zombie in zombies:
    zombie.x -= 0.5
  drawing_zombies()

Я видел запуск очень похожей программы, и ее точка не мигала, казалось, что она действительно двигалась. Однако, когда моя программа запускается, она мигает (исчезает и появляется снова очень быстро)

Остальной код приведен ниже (помимо кучи вещей, определяющих векторный класс, который такой же, как и в сработавшей программе, так что внутри него не может быть проблемы)

class vector(collections.abc.Sequence):
    precision = 6
    __slots__ = ('_x', '_y', '_hash')

    def __init__(self, x, y):
        self._hash = None
        self._x = round(x, self.precision)
        self._y = round(y, self.precision)
    #The rest of the vector class would have been here

zombies = []
placement_options = [0, 1, 2, -1]

def new_zombie():
    placement_level = random.choice(placement_options)
    z = vector(200, placement_level*100)
    print(placement_level)
    zombies.append(z)

def drawing_zombies():
  clear()
  for zombie in zombies:
    goto(zombie.x, zombie.y)
    dot(20, 'red')
  update()

def movement():
  for zombie in zombies:
    zombie.x -= 0.5
  drawing_zombies()

  for z in zombies:
    if z.x < -200:
      done()
  ontimer(movement(), 50)

def gameplay():
  setup(420, 420, 370, 0)
  hideturtle()
  up()
  new_zombie()
  movement()
  done()


gameplay()

person Frasher Gray    schedule 10.06.2020    source источник
comment
Попробуйте добавить turtle.tracer(False) в начале функции и turtle.tracer(True) в конце.   -  person Johnny Mopp    schedule 10.06.2020
comment
Ok. Сегодня не могу, завтра проверю.   -  person Frasher Gray    schedule 11.06.2020
comment
@JohnnyMopp tracer(False) сработало. Вы должны сделать это ответом.   -  person Frasher Gray    schedule 11.06.2020


Ответы (1)


Вы можете использовать функцию tracer(False), чтобы отключить обновления экрана. Таким образом, весь рисунок выполняется в памяти и будет сразу скопирован на экран при вызове tracer(True).

def drawing_zombies():
  tracer(False)
  clear()
  for zombie in zombies:
    goto(zombie.x, zombie.y)
    dot(20, 'red')
  update()
  tracer(True)
person Johnny Mopp    schedule 11.06.2020