为什么乌龟对象的setx(x)函数出错?

时间:2019-05-15 07:15:45

标签: python

我正在制作一款太空入侵者游戏,试图让自己更熟悉Python。所以我从球员运动开始。在我的主要课程中,我首先创建播放器。之后,我尝试调用移动方法。但是由于某种原因,我似乎无法使用播放器对象调用任何turtle语句。为什么会丢失它的turtle属性?

这是我的太空侵略者游戏。我从乌龟库尝试了多个语句。但是它们似乎都不起作用。我尝试了gotosetx(x)setposition

import turtle

class Player:
    movementSpeed = 0
    xcor = 0
    ycor = 0

    def __init__(self, movementSpeed, xcor, ycor):
        self.movementSpeed = movementSpeed
        self.xcor = xcor
        self.ycor = ycor
        self = turtle.Turtle()
        self.color("blue")
        self.shape("triangle")
        self.penup()
        self.speed(0)
        self.setposition(xcor, ycor)
        self.setheading(90)

    def move_left(self):
        x = self.xcor
        x -= self.movementSpeed
        if x <  -280:
            x = -280
        self.setx(x)

    def move_right(self):
        x = self.xcor
        x += self.movementSpeed
        if x > 280:
            x = 280
        self.turtle.setx(x)

from Player import Player

player = Player(movementSpeed, 0 ,-250)
wn.onkey(speler.move_left, "Left")
wn.onkey(speler.move_right, "Right")

我希望玩家对象能够移动。 但是出现了以下错误

AttributeError: 'Player' object has no attribute 'turtle'

1 个答案:

答案 0 :(得分:0)

基本解决方案

__init__中,您将乌龟对象分配给self,而不是分配给self.turtle,因此没有这样的属性也就不足为奇了。

如果想要它,请将构造函数中提到的行更改为:

self.turtle = turtle.Turtle()

更详细的解决方案

您正在混合两种不同的方法:PlayerTurtlePlayerTurtle组成。如果您想要第一个,请使用继承:

class Player(turtle.Turtle):
    def __init__(self, *args, **kwargs):
        super(Player, self).__init__(*args, **kwargs)
        # the rest of the initialization

,然后使用Turtle的所有方法和属性作为Player的属性,例如:

self.shape("triangle")

Player包含/污染Turtle的情况下,只需使用基本解决方案,并在构造函数中正确设置Player's turtle:

self.turtle = turtle.Turtle()
self.turtle.color("blue")
self.turtle.shape("triangle")
self.turtle.penup()