Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 左转、右转、加速或减速_Python_Python 3.x_Turtle Graphics - Fatal编程技术网

Python 左转、右转、加速或减速

Python 左转、右转、加速或减速,python,python-3.x,turtle-graphics,Python,Python 3.x,Turtle Graphics,我用乌龟试着移动我的精灵,让它向左或向右或加速或减速。但是我的编码不起作用。它只朝一个方向移动,然后在屏幕上消失。不知道我哪里做错了 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, s

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

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

你的代码基本上看起来是有效的——它的启动速度太快了,在它离开屏幕之前很难控制它。我在代码中看到的主要问题是,你们都重新定义了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()