Python海龟绘图 - 将海龟置于最前面

4
我有两只乌龟在我的程序中。他们发生了碰撞的动画,但我想让一只乌龟叠放在另一只上面,就像这样:Visual Image 那么我的问题是 - 如何实现这个效果 - 是否有一个简单的代码行,例如:turtle.front(),如果没有,那么应该怎么做呢?

1
我认为如果你在画海龟2之后再画海龟1,黄色将自动渲染在蓝色上方。 - xor
谢谢,我会尝试的! - A Display Name
2个回答

3
我在回答如何让一个海龟对象永远在另一个对象上方时简要讨论了这个问题,对于这种简单情况的经验法则是:

最后到达的在顶部

由于Python turtle不会优化零运动,一个简单的方法是将您想要置于顶部的海龟移动零距离:

import turtle

def tofront(t):
    t.forward(0)

gold = turtle.Turtle("square")
gold.turtlesize(5)
gold.color("gold")
gold.setx(-10)

blue = turtle.Turtle("square")
blue.turtlesize(5)
blue.color("blue")
blue.setx(10)

turtle.onscreenclick(lambda x, y: tofront(gold))

turtle.done()

蓝色的海龟覆盖在金色的海龟上。单击任何位置,情况将被颠倒。
尽管 @Bally 的解决方案可行,但我的问题是每次调整图层时都会创建一个新的海龟。而且这些海龟不会消失。观察 turtle.turtles() 的增长。即使我的解决方案也会在海龟撤消缓冲区中留下痕迹,但我必须相信它消耗的资源更少。

1
只需将此添加到turtle.py文件中。
def tofront(self, tobring):
    newfront = tobring.clone()
    tobring.ht()
    return newfront

这个方法可以正确地工作,所以它应该返回一个新的乌龟克隆体,并置于其他乌龟之上。

参数 tobring - 它是你当前的乌龟(你想要置于前面的那个)

你可以在你的程序中使用这个函数,或者将它放入 turtle.py 文件中。 如果这样做,请不要忘记将其添加到命令列表中,即 _tg_turtle_functions。

_tg_turtle_functions = ['back', 'backward', 'begin_fill', 'begin_poly', 'bk',
    'circle', 'clear', 'clearstamp', 'clearstamps', 'clone', 'tofront', 'color',

我在克隆命令之后完成了它。
希望这能帮到你。

2
这个解决方案每次调整图层时都会创建一个新的海龟,而这些海龟会一直存在(参见 turtle.turtles())。我提供了一个更简单的替代答案来回答这个问题,它不涉及创建新的海龟。 - cdlane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接