此代码设置了一只乌龟放置的邮票的背景。另一只乌龟(其形状来自导入的图像文件)在背景上四处移动。但是,只要将第二只乌龟放在第一只乌龟放置的印章上就看不到。如果我将移动的乌龟设为标准形状之一(例如圆形),则它仍然可见。因此,为乌龟使用导入的图像有些奇怪,这会导致它在贴在其中一张邮票上时消失。
#!/usr/bin/python3
from turtle import *
from time import sleep
scr = Screen()
scr.register_shape('player.gif')
mover = Turtle()
bgnd = Turtle()
bgnd.color('blue')
mover.shape('player.gif')
bgnd.shape('square')
for i in range(5):
bgnd.goto(i*20,0)
bgnd.stamp()
for i in range(5):
mover.goto((8-i)*20,0)
sleep(1)
随附的图像是我称为player.gif的图像(我可以在帖子底部看到它,但是它很小)。
谁能帮助解释为什么这是怎么回事?
最佳答案
我不确定这是bug还是微妙之处,但图章不是屏幕上的像素,如dot()
一样-stamp()
函数返回一个ID,可以有选择地删除它们。我的猜测是这是基础tkinter的分层问题。在turtle中,如果遇到分层问题,有时可以按不同的顺序进行操作:
from turtle import Screen, Turtle
from time import sleep
background = Turtle()
background.hideturtle()
background.color('blue')
background.shape('square')
for i in range(5):
background.goto(i * 20, 0)
background.stamp()
screen = Screen()
screen.register_shape('player.gif')
mover = Turtle()
mover.shape('player.gif')
for i in range(5):
mover.goto((8 - i) * 20, 0)
sleep(1)
screen.exitonclick()
从长远来看,
time.sleep()
不是基于事件的乌龟的朋友。像这样的例子很好,但仅此而已,它将导致更多的问题,无法解决。查看屏幕的ontimer()
方法。