Ваша while stop == False:
петля и time.sleep(0.5)
не имеют места в управляемой событиями среде, такой как черепаха. Вместо этого, когда мы запускаем каждую пулю, приведенный ниже код присоединяет событие таймера, которое перемещает его, пока оно не исчезнет. В этот момент пуля перерабатывается.
Этот упрощенный пример просто стреляет пулями в случайных направлениях от центра экрана. Вы можете продолжать нажимать пробел, чтобы генерировать одновременно пули, которые все движутся в своем направлении, пока они не уйдут достаточно далеко:
from turtle import Screen, Turtle
from random import randrange
def move_bullet(bullet):
bullet.forward(15)
if bullet.distance((0, 0)) > 400:
bullet.hideturtle()
bullets.append(bullet)
else:
screen.ontimer(lambda b=bullet: move_bullet(b), 50)
screen.update()
def shoot_bullet():
screen.onkey(None, 'space') # disable handler inside hander
bullet = bullets.pop() if bullets else bullet_prototype.clone()
bullet.home()
bullet.setheading(randrange(0, 360))
bullet.showturtle()
move_bullet(bullet)
screen.onkey(shoot_bullet, 'space') # reenable handler on exit
bullet_prototype = Turtle('circle')
bullet_prototype.hideturtle()
bullet_prototype.dot(10) # just for this example, not for actual code
bullet_prototype.shapesize(0.5)
bullet_prototype.color('red')
bullet_prototype.penup()
bullets = []
screen = Screen()
screen.tracer(False)
screen.onkey(shoot_bullet, 'space')
screen.listen()
screen.mainloop()