Python - 让一只龟对象永远高于另一只

时间:2014-03-04 00:41:21

标签: python turtle-graphics

我想创建一个程序,其中一个Turtle对象始终位于所有其他Turtle对象之上。我不知道这是否可行,但任何帮助都会得到赞赏。

这是我的代码:

from turtle import *
while True:
    tri = Turtle()
    turtle = Turtle()
    tri.pu()
    tri.pencolor("white")
    tri.color("black")
    tri.shape("turtle")
    tri.bk(400)
    turtle = Turtle()
    turtle.pu()
    turtle.pencolor("white")
    turtle.shape("square")
    turtle.color("white")
    turtle.pu()
    turtle.speed(0)
    tri.speed(0)
    turtle.shapesize(100,100,00)
    setheading(towards(turtle))
    while tri.distance(turtle) > 10:
        turtle.ondrag(turtle.goto)
        tri.setheading(tri.towards(turtle))
        tri.fd(5)
    clearscreen()

2 个答案:

答案 0 :(得分:1)

为什么不首先为“底部”乌龟做所有的绘图?然后为“顶级”乌龟绘图?这应该使顶级龟始终可见。

答案 1 :(得分:0)

我观察到的海龟分层规则:

  • 多只海龟移动到同一位置:最后到达位于顶部。

  • 多只乌龟都画了同样的东西:没有规则!

为了说明我的第二点,请考虑以下代码:

from turtle import Turtle, Screen

a = Turtle(shape="square")
a.color("red")
a.width(6)
b = Turtle(shape="circle")
b.color("green")
b.width(3)

b.goto(-300, 0)
b.dot()
a.goto(-300, 0)
a.dot()

a.goto(300, 0)
b.goto(300, 0)

screen = Screen()
screen.exitonclick()

运行它并观察结果。在我的系统上,最终的goto()在红色的线条上画了一条绿色的长绿线,但是一旦完成绘图,绿线就会消失。注释掉对dot()的两次调用并再次观察。现在绿线仍然在红线上。现在将呼叫从dot()更改为stamp()circle(5)。观察并制定自己的规则......

现在回到你的例子,这是非常有缺陷的(你实际操纵三只乌龟,而不是两只!)这是我的简化:

from turtle import Turtle, Screen

tri = Turtle(shape="turtle")
tri.color("black")
tri.pu()

turtle = Turtle(shape="square")
turtle.shapesize(4)
turtle.color("pink")
turtle.pu()

def drag_handler(x, y):
    turtle.ondrag(None)
    turtle.goto(x, y)
    turtle.ondrag(drag_handler)

turtle.ondrag(drag_handler)

tri.bk(400)
while tri.distance(turtle) > 10:
    tri.setheading(tri.towards(turtle))
    tri.fd(5)

screen = Screen()
screen.mainloop()

您可以通过拖动粉红色方块来取笑tri,直到tri赶上它。最终,tri只要在tri捕获它时方块不移动就会落在上面。如果你将方格拖过tri,那么它将暂时覆盖他,因为它是#34;最后到达"。