Python 龟点无故闪烁

Python Turtle Dot Flashes for No Reason

在我的程序中,为了模拟运动,添加了点的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,它与运行的程序相同,所以它里面没有任何问题)

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()

您可以使用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)