我正在尝试在python乌龟中创建一个游戏,在其中打空间,向乌龟所面对的方向发射箭头。但是,当我击中太空时,箭头始终会朝相同的方向射击。
我已经尝试将箭头和乌龟分配给相同的键绑定,但这使乌龟无法移动
def left():
t.left(15)
k.left(20)
def right():
t.right(15)
k.right(20)
def shoot():
k = turtle.Turtle()
k.penup()
k.color("orange")
k.shape("arrow")
ts.onkey(shoot, "space")
我期望箭头从乌龟所面对的方向射击,但它只会保持正确的射击。
答案 0 :(得分:2)
要正确执行此操作(使用无限制的箭头),需要进行更多工作。我们需要有一个计时器事件来驱动每个活动的箭头。由于乌龟是不会垃圾收集的全局实体,因此我们想重用用过的箭头。我们需要在触发时阻止触发按钮,以防止事件重叠。以下内容应按照您的描述进行:
from turtle import Screen, Turtle, mainloop
def left():
player.left(15)
def right():
player.right(15)
def shoot():
screen.onkey(None, 'space') # disable handler inside handler
if quiver:
arrow = quiver.pop(0)
else:
arrow = Turtle('arrow', visible=False)
arrow.speed('fastest')
arrow.color('orange')
arrow.penup()
arrow.setposition(player.position())
arrow.setheading(player.heading())
flight(arrow)
arrow.showturtle()
screen.onkey(shoot, 'space')
def flight(arrow):
if arrow.distance(0, 0) < 325:
arrow.forward(10)
screen.ontimer(lambda a=arrow: flight(a), 100)
else:
arrow.hideturtle()
quiver.append(arrow)
screen = Screen()
screen.setup(500, 500)
quiver = []
player = Turtle('turtle')
player.color('dark green', 'light green')
player.speed('fastest')
screen.onkey(shoot, 'space')
screen.onkey(left, 'Left')
screen.onkey(right, 'Right')
screen.listen()
mainloop()
要回答您的原始问题,无需将它们一起旋转。准备使用b.setposition(a.position())
和b.setheading(a.heading())
进行拍摄时,可以使另一个对齐。
答案 1 :(得分:0)
尝试一下:
k = turtle.Turtle()
def left():
global t, k
t.left(15)
k.left(15)
def right():
global t, k
t.right(15)
k.right(15)
def shoot():
global k
k.penup()
k.color("orange")
k.shape("arrow")
ts.onkey(shoot, "space")
ts.onkey(left, "left")
ts.onkey(right, "right")