Чтобы сделать это правильно, с неограниченным количеством стрелок, требуется больше работы.Нам нужно иметь событие таймера, управляющее каждой активной стрелкой.Поскольку черепахи - это глобальные объекты, которые не собираются мусором, мы хотим повторно использовать использованные стрелки.Нам нужно заблокировать кнопку огня во время стрельбы, чтобы предотвратить наложение событий.Следующее должно делать то, что вы описываете:
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())
.