【问题标题】:Turtle from image won't draw over another turtle's stamp图像中的乌龟不会覆盖另一只乌龟的印章
【发布时间】:2019-07-13 15:32:28
【问题描述】:

这段代码设置了一只乌龟放置的邮票的背景。另一只海龟(其形状来自导入的图像文件)在背景上移动。但是,当第二只乌龟放置在第一只乌龟放置的印章上时,它是不可见的。如果我使移动的乌龟成为标准形状之一,例如圆形,那么它会保持可见。因此,为海龟使用导入的图像有些奇怪,这会导致它在其中一个图章顶部时消失。

#!/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 python-3.x turtle-graphics


    【解决方案1】:

    我不确定这是一个错误还是微妙之处,但戳记不是屏幕上的像素,如 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() 方法。

    【讨论】:

    • 感谢 - 我尝试了各种版本的代码重新排序以查看效果,但它仅在我什至创建移动乌龟之前实现了背景乌龟的所有内容的情况下才有效。 \n也感谢有关 screen.ontimer() 的提示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 2017-08-09
    • 1970-01-01
    • 2023-03-28
    • 2022-11-19
    • 1970-01-01
    相关资源
    最近更新 更多