Pygame,self没有定义

时间:2014-04-18 16:36:38

标签: python pygame self

所以我在编译时遇到这个错误,我不明白,因为我有两个相同的类,一个工作正常,另一个抛出这个错误。

如果self.currentState2 == 1: NameError:名称'self'未定义


class EnemyShip(pygame.sprite.Sprite):
    def __init__(self, (x, y), playerShip):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("enemy.png")
        self.image = self.image.convert()
        tranColor = self.image.get_at((1, 1))
        self.image.set_colorkey(tranColor)
        self.rect = self.image.get_rect()
        self.enemyX = float(x)
        self.enemyY = float(y)
        self.ship = playerShip
        self.count = 0
        self.currentState2 = 0

    def update(self):
        self.count += 1
        x_component = self.ship.rect.centerx-self.enemyX
        y_component = self.ship.rect.centery-self.enemyY
        distance = math.hypot(x_component, y_component)
        if distance < 100:
            self.currentState2 = 1
            print distance
        elif distance > 100:
            self.currentState2 = 0
            print "test2"


        if self.count < 600:
            self.caculateNextPosition()
            self.rect.center = (self.enemyX, self.enemyY)
        elif self.count < 600:
            self.caculateNextPositionEvade()
            self.rect.center = (self.enemyX, self.enemyY)
        else:
            self.count = 0    

    def caculateNextPosition(self):
        shipX = self.ship.rect.centerx
        shipY = self.ship.rect.centery
    if self.currentState2==1:
        if self.enemyY < shipY:
            self.enemyY += 4
        elif self.enemyY > shipY:
            self.enemyY -= 4

        if self.enemyX < shipX:
            self.enemyX += 4
        elif self.enemyX > shipX:
            self.enemyX -= 4
    elif self.currentState2==0: 
        if self.enemyY < shipY:
            self.enemyY += 0
        elif self.enemyY > shipY:
            self.enemyY -= 0

        if self.enemyX < shipX:
            self.enemyX += 0
        elif self.enemyX > shipX:
        self.enemyX -= 0

5 个答案:

答案 0 :(得分:2)

方法calculateNextPosition中的缩进不正确。因此,if语句系列在类的主体(而不是方法)中执行,其中self未被定义。

答案 1 :(得分:1)

你的缩进是关闭的。 if语句不在您认为的方法之内。

答案 2 :(得分:1)

检查缩进 - 条件与函数定义处于同一级别。换句话说,它不在函数内部,所以技术上是 - 自我没有被定义。

答案 3 :(得分:1)

您可能只有缩进错误。

由于self被隐式作为实例方法的第一个参数传递,如果你有类似的东西:

class A(object):
    def foo(self):
        return "foo called"

...然后没关系,因为self是该方法的局部变量。但是,如果你像这样填写缩进词:

class A(object):
    def bar(self):
        if self.x == 1:
            do_stuff()
    if self.x == 2:
        do_something_else()

...第二个self.x会导致错误,因为self并不代表函数范围之外的任何内容。

答案 4 :(得分:1)

您需要缩进这些行:

if self.currentState2==1:

elif self.currentState2==0: 

它们不被视为函数def的一部分,因为它们与函数名称具有相同的缩进。