图片中的乌龟不会覆盖另一只乌龟的邮票

时间:2019-07-13 15:32:28

标签: python python-3.x turtle-graphics

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

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

任何人都可以帮助解释为什么会这样以及如何解决吗?

player.gif

1 个答案:

答案 0 :(得分:0)

我不确定这是bug还是微妙之处,但图章不是dot()这样的屏幕上的像素-stamp()函数返回的ID可以有选择地将其删除。我的猜测是这是基础tkinter的分层问题。在乌龟中,如果遇到分层问题,有时可以按不同的顺序进行操作:

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

enter image description here

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