【问题标题】:Turn left, right, accelerate or decelerate with Python turtle使用 Python turtle 向左、向右、加速或减速
【发布时间】:2019-04-11 05:51:31
【问题描述】:

我正在使用海龟试图移动我的 Sprite,让它向左或向右转或加速或减速。但是我的编码不起作用。它只向一个方向移动,然后消失在屏幕上。不知道我哪里做错了。

import turtle
turtle.fd(0)
turtle.speed(0)
turtle.bgcolor("black")
turtle.hideturtle()
turtle.setundobuffer(1)
turtle.tracer(1)


class Sprite(turtle.Turtle):
    def __init__(self, spriteshape, color, startx, starty):
        turtle.Turtle.__init__(self, shape=spriteshape)
        self.speed(0)
        self.penup()
        self.color(color)
        self.fd(0)
        self.goto(startx, starty)
        self.speed = 1

    def move(self):
        self.fd(self.speed)


class Player(Sprite):
    def __init__(self, spriteshape, color, startx, starty):
        Sprite.__init__(self, spriteshape, color, startx, starty)
        self.speed = 4
        self.lives = 3

    def turn_left(self):
        self.lt(45)

    def turn_right(self):
        self.rt(45)

    def accelerate(self):
        self.speed += 1

    def decelerate(self):
        self.speed -= 1


# Create my sprite
player = Player("triangle", "white", 0, 0)
turtle.onkey(player.turn_left, "Left")
turtle.onkey(player.turn_right, "Right")
turtle.onkey(player.accelerate, "Up")
turtle.onkey(player.decelerate, "Down")
turtle.listen()

# Main game loop
while True:
    player.move()

【问题讨论】:

    标签: python python-3.x turtle-graphics


    【解决方案1】:

    您的代码基本上似乎可以工作——它刚开始的速度非常快,以至于在它跑出屏幕之前很难控制它。我在代码中看到的主要问题是你们都重新定义了turtle.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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多