此代码设置了一只乌龟放置的邮票的背景。另一只乌龟(其形状来自导入的图像文件)在背景上四处移动。但是,只要将第二只乌龟放在第一只乌龟放置的印章上就看不到。如果我将移动的乌龟设为标准形状之一(例如圆形),则它仍然可见。因此,为乌龟使用导入的图像有些奇怪,这会导致它在贴在其中一张邮票上时消失。

#!/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的图像(我可以在帖子底部看到它,但是它很小)。

谁能帮助解释为什么这是怎么回事?

python - 图片中的 turtle 不会覆盖另一只 turtle 的邮票-LMLPHP

最佳答案

我不确定这是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()


python - 图片中的 turtle 不会覆盖另一只 turtle 的邮票-LMLPHP

从长远来看,time.sleep()不是基于事件的乌龟的朋友。像这样的例子很好,但仅此而已,它将导致更多的问题,无法解决。查看屏幕的ontimer()方法。

10-06 08:39