Ваш код, по-видимому, работает - он просто запускается так быстро, что трудно получить контроль над ним, прежде чем он исчезнет с экрана. Основная проблема, которую я вижу в коде, заключается в том, что вы оба переопределили turtle.speed
, пытаясь использовать как его оригинальное, так и новое определение. Вы должны придумать другое имя для вашей переменной экземпляра 'speed'.
Следующая проблема заключается в том, что вы используете while True:
, которому нет места в мире, управляемом событиями, как черепаха. Вы должны использовать событие таймера вместо этого. Следующая доработка решает обе вышеуказанные проблемы и настраивает некоторые другие детали:
from turtle import Screen, Turtle
class Sprite(Turtle):
def __init__(self, spriteshape, color, startx, starty):
super().__init__(shape=spriteshape)
self.my_speed = 1
self.speed('fastest')
self.color(color)
self.penup()
self.goto(startx, starty)
def move(self):
self.forward(self.my_speed)
class Player(Sprite):
def __init__(self, spriteshape, color, startx, starty):
super().__init__(spriteshape, color, startx, starty)
self.my_speed = 4
def turn_left(self):
self.left(45)
def turn_right(self):
self.right(45)
def accelerate(self):
self.my_speed += 1
def decelerate(self):
self.my_speed -= 1
# Main game loop
def run():
player.move()
screen.ontimer(run, 50)
screen = Screen()
screen.bgcolor("black")
# Create my sprite
player = Player("triangle", "white", 0, 0)
screen.onkey(player.turn_left, "Left")
screen.onkey(player.turn_right, "Right")
screen.onkey(player.accelerate, "Up")
screen.onkey(player.decelerate, "Down")
screen.listen()
run()
screen.mainloop()