Проблема с этими двумя строками кода:
wn.onkey(move_left(), "Left")
wn.onkey(move_right(),"Right")
Вы не хотите вызывать move_left()
, вы хотите передать move_left
для вызова обработчиком события при нажатии клавиши:
wn.onkey(move_left, 'Left')
wn.onkey(move_right, 'Right')
Включая скобки, вы передаете возвращаемое значение move_left()
, равное None
, фактически отключая событие вместо его включения!
Вот переделка вашего кода с помощью вышеуказанного исправления:
from turtle import Screen, Turtle
screen = Screen()
screen.bgcolor('black')
screen.title("Space invaders")
# Border
border_pen = Turtle()
border_pen.hideturtle()
border_pen.pensize(3)
border_pen.speed('fastest')
border_pen.color('white')
border_pen.penup()
border_pen.setposition(-300, -300)
border_pen.pendown()
for _ in range(4):
border_pen.forward(600)
border_pen.left(90)
# Create the player turtle
player = Turtle()
player.shape('triangle')
player.speed('fastest')
player.color('blue')
player.penup()
player.setposition(0, -250)
player.setheading(90)
playerspeed = 15
# Move player left and right
def move_left():
x = player.xcor() - playerspeed
player.setx(x)
def move_right():
x = player.xcor() + playerspeed
player.setx(x)
# Keyboard bindings
screen.onkey(move_left, 'Left')
screen.onkey(move_right, 'Right')
screen.listen()
screen.mainloop()