Python 海龟图形:键盘绑定功能第一次后不工作
我是一个没有经验的Python 3程序员。我根据YouTube上的教程创建了这个游戏,使用了海龟模块,我遇到了一个问题。下面是代码的一部分,我认为问题在于:Python 海龟图形:键盘绑定功能第一次后不工作,python,turtle-graphics,Python,Turtle Graphics,我是一个没有经验的Python 3程序员。我根据YouTube上的教程创建了这个游戏,使用了海龟模块,我遇到了一个问题。下面是代码的一部分,我认为问题在于: def missile_status(self): i = 0 if self.status == "firing": while i <= 5: i += 1 turtle.time.sleep(1) if i >= 5:
def missile_status(self):
i = 0
if self.status == "firing":
while i <= 5:
i += 1
turtle.time.sleep(1)
if i >= 5:
self.status = "ready"
def shoot(self):
if self.status == "ready":
self.goto(player_traits.xcor(), player_traits.ycor())
self.setheading(player_traits.heading())
self.status = "firing"
self.st()
def导弹_状态(自身):
i=0
如果self.status==“正在启动”:
当i=5时:
self.status=“就绪”
def喷射(自):
如果self.status==“就绪”:
self.goto(player_traits.xcor(),player_traits.ycor())
self.setheading(player_traits.heading())
self.status=“点火”
self.st()
我将函数
shot
绑定到空格键。当我第一次按下空格键时,它会执行该函数并正常工作。但之后,如果我按空格键再次拍摄(五秒钟后),该函数将无法工作(无法拍摄)。您可能没有提供足够的代码进行调试,但在turtle这样的事件驱动环境中,任何包含time.sleep()
的教程都是可疑的。下面是一个完整的、可运行的、简化的示例,说明了我如何处理这个问题。玩家只在一个维度上移动,以保持示例的简单性,但基本思想也应该在两个维度上工作:
from turtle import Screen, Turtle
from functools import partial
class Missle(Turtle):
def __init__(self):
super().__init__("circle")
self.hideturtle()
self.shapesize(0.5)
self.setheading(90)
self.penup()
screen.onkey(self.shoot, "space") # enable shooting
def track_missle(self, milliseconds=5000):
if milliseconds > 0:
self.forward(10)
milliseconds -= 100
# can't use partial() due to object has no attribute '__name__'
screen.ontimer(lambda: self.track_missle(milliseconds), 100)
else:
self.hideturtle() # this shot is finished
screen.onkey(self.shoot, "space") # reenable shooting
def shoot(self):
screen.onkey(None, "space") # disable further shots for now
self.goto(player.position()) # shots originate from player's position
self.showturtle()
screen.ontimer(self.track_missle, 100) # move for 5 secs, update every 0.1 sec
class Player(Turtle):
def __init__(self):
super().__init__("triangle")
self.settiltangle(90) # move side to side but face upward
self.penup()
self.sety(-screen.window_height() / 4)
screen.onkey(partial(self.forward, 10), "Right")
screen.onkey(partial(self.backward, 10), "Left")
screen = Screen()
player = Player()
missle = Missle()
screen.listen()
screen.mainloop()
您可以演示如何将空格键与函数链接