有没有一种方法可以使对象在Python Turtle中与另一个对象一起旋转?

时间:2019-05-01 15:33:21

标签: python turtle-graphics

我正在尝试在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")

我期望箭头从乌龟所面对的方向射击,但它只会保持正确的射击。

2 个答案:

答案 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()

enter image description here

要回答您的原始问题,无需将它们一起旋转。准备使用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")