在 Python Turtle 中有没有办法让一个对象与另一个对象一起旋转?

Is there a way to make an object rotate with another object in Python Turtle?

我正在尝试在 python turtle 中创建一个游戏,在该游戏中击中 space,箭头会朝 turtle 面对的方向发射。然而,当我点击 space 时,箭头总是射向相同的方向。

我已经尝试过将箭头和海龟分配给相同的键绑定,但这会使海龟无法移动

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")

我本以为箭会从乌龟面向的方向射出,但它一直射向正确的方向。

试试这个:

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")

要正确地做到这一点,使用无限的箭头,需要更多的工作。我们需要有一个计时器事件来驱动每个活动箭头。由于海龟是不被垃圾收集的全局实体,我们希望重用用过的箭头。我们需要在开火时挡住开火按钮,以防止事件重叠。以下应该按照您的描述进行:

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()).

将一个与另一个对齐