在我的代码中,我编写了一个定义,以在操作完成后更改乌龟的背景。对我而言,该定义看起来不错,并且看不到任何问题,但是当操作完成并且假定背景图像发生更改时,乌龟窗口将变得无响应。这是我正在谈论的定义:
if default.distance(pickaxe) < 10:
screen.clearscreen()
wn.bgpic('TrumpTowersInside.gif')
如果出于任何原因需要其余代码,那么这是我的基于乌龟的游戏的其余代码:
from turtle import Screen, Turtle
def get_mouse_click_coor(x, y):
print(x, y)
def drag(x, y):
default.ondrag(None) # disable handler inside handler
default.goto(x, y)
if default.distance(scar) < 40:
default.shape('defaultscar.gif')
scar.hideturtle()
mini.hideturtle()
pickaxe.showturtle()
if default.distance(mini) < 40:
banshee.goto(-200,200)
banshee.showturtle()
banshee.speed(0)
for x in range(200):
banshee.forward(1)
banshee.right(90)
banshee.forward(1)
banshee.left(90)
banshee.shape('banshee.gif')
banshee.left(90)
banshee.forward(50)
scar.hideturtle()
mini.hideturtle()
banshee.shape('bansheescar.gif')
default.shape('defaultdead.gif')
if default.distance(pickaxe) < 10:
screen.clearscreen()
wn.bgpic('TrumpTowersInside.gif')
default.ondrag(drag)
wn = Screen()
wn.setup(500, 500)
wn.bgpic('TrumpTowers.gif')
wn.register_shape('default.gif')
wn.register_shape('scar.gif')
wn.register_shape('defaultscar.gif')
wn.register_shape('mini.gif')
wn.register_shape('defaultgliding.gif')
wn.register_shape('banshee.gif')
wn.register_shape('bansheescar.gif')
wn.register_shape('defaultdead.gif')
wn.register_shape('pickaxe.gif')
scar = Turtle('scar.gif', visible=False)
scar.speed(-1)
scar.color('pink')
scar.penup()
scar.left(90)
scar.forward(50)
scar.showturtle()
mini = Turtle('mini.gif', visible=False)
mini.speed(-1)
mini.color('pink')
mini.penup()
mini.forward(60)
mini.showturtle()
default = Turtle('default.gif', visible=False)
default.shapesize(2)
default.speed(1)
default.penup()
default.left(90)
default.backward(50)
default.showturtle()
default.ondrag(drag)
banshee = Turtle('defaultgliding.gif', visible=False)
banshee.shapesize(2)
banshee.speed(1)
banshee.penup()
# banshee.showturtle()
pickaxe = Turtle('pickaxe.gif', visible=False)
pickaxe.pu()
pickaxe.forward(10)
pickaxe.left(90)
pickaxe.forward(50)
wn.mainloop()
答案 0 :(得分:1)
clear()
的文档在以下内容上很清楚:
将TurtleScreen重置为其初始状态:白色背景, 没有背景图片,没有事件绑定和跟踪。
ondrag()
撤消了所有事件绑定(即clear()
),因此您已重做它们。
更新
屏幕的clear()
方法(也称为clearscreen()
功能)比文档可能使人们相信的更为严格。似乎会破坏所有用户创建的乌龟,并将默认乌龟重置为其初始状态。
屏幕上的.reset()
方法并没有好得多-您可以保留乌龟,但它们会丢失您设置的所有属性。
作为清除或重置屏幕的一种替代方法,建议您让乌龟clear()
清理掉笔下的所有图形,然后将它们移动到新位置或home()
。 / p>
from turtle import Screen, Turtle
def drag(x, y):
default.ondrag(None) # disable handler inside handler
default.goto(x, y)
if default.distance(pickaxe) < 10:
wn.bgpic('TrumpTowersInside.gif')
pickaxe.hideturtle() # should move it elsewhere
default.ondrag(drag)
wn = Screen()
wn.setup(500, 500)
wn.bgpic('TrumpTowers.gif')
default = Turtle('turtle', visible=False)
default.color('red')
default.shapesize(2)
default.penup()
default.left(90)
default.backward(50)
default.showturtle()
default.ondrag(drag)
pickaxe = Turtle('turtle', visible=False)
pickaxe.color('green')
pickaxe.penup()
pickaxe.forward(10)
pickaxe.left(90)
pickaxe.forward(50)
pickaxe.showturtle()
wn.mainloop()