我正在制作一款太空入侵者游戏,试图让自己更熟悉Python。所以我从球员运动开始。在我的主要课程中,我首先创建播放器。之后,我尝试调用移动方法。但是由于某种原因,我似乎无法使用播放器对象调用任何turtle
语句。为什么会丢失它的turtle
属性?
这是我的太空侵略者游戏。我从乌龟库尝试了多个语句。但是它们似乎都不起作用。我尝试了goto
,setx(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'
答案 0 :(得分:0)
在__init__
中,您将乌龟对象分配给self
,而不是分配给self.turtle
,因此没有这样的属性也就不足为奇了。
如果想要它,请将构造函数中提到的行更改为:
self.turtle = turtle.Turtle()
您正在混合两种不同的方法:Player
是Turtle
和Player
由Turtle
组成。如果您想要第一个,请使用继承:
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()