在 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())
.
将一个与另一个对齐
我正在尝试在 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())
.