2015-11-19 126 views
1

我正在開發一個「Space Invaders like」遊戲,使用pygame。目前我的代碼功能正常,我已經完成了遊戲基礎知識。 所以現在我想使敵人對我的球員移動,這裏是我的代碼:Python - 雪碧追逐另一個雪碧

class createShip(imports.pygame.sprite.Sprite): 
    def __init__(self): 
     imports.pygame.sprite.Sprite.__init__(self) 
     self.image = loader.joueur_image 
     self.rect = loader.joueur_rect 
     self.rect.x = constantes.screen_width/2 - self.rect.width/2 
     self.rect.y = constantes.screen_height - self.rect.height - 20 

    def update(self): 
     if (imports.pygame.key.get_pressed()[imports.pygame.K_LEFT] == True): 
      self.rect.x -= constantes.speed_ship 
     elif (imports.pygame.key.get_pressed()[imports.pygame.K_RIGHT] == True): 
      self.rect.x += constantes.speed_ship 
     if self.rect.x < 0: 
      self.rect.x = 0 
     elif self.rect.x > constantes.screen_width - self.rect.width: 
      self.rect.x = constantes.screen_width - self.rect.width 

class createEnemy(imports.pygame.sprite.Sprite): 
    def __init__(self): 
     imports.pygame.sprite.Sprite.__init__(self) 
     self.image = imports.pygame.Surface([50, 50]) 
     self.image.fill((0, 0, 0)) 
     self.rect = self.image.get_rect() 
     self.rect.y = 0 
     self.rect.x = imports.random.randint(constantes.screen_width/2 - 350, constantes.screen_width/2 + 350) 

    def update(self): 
     self.rect.y += imports.random.randint(constantes.speed_enemy - 8, constantes.speed_enemy + 2) 
     if self.rect.y > constantes.screen_height - 35: 
      self.rect.y = 0 
      self.rect.x = imports.random.randint(constantes.screen_width/2 - 350, constantes.screen_width/2 + 350) 

這裏是我的問題。我不想在遊戲循環中編寫移動部分,調用精靈更新方法更簡單。 所以我希望在我的敵人級別裏面叫我的船級,得到ship.rect.xship.rect.y,但顯然它沒有用,因爲我的船隻物體沒有被創建。

我找不到讓我的船座標在我的敵人級別內的方法。我想到做另一個繼承,但必須有一個更簡單的方法來實現這一點。

回答

0

(我回答是因爲我沒有評論的聲望,否則我會評論) 我正在寫一個程序很快就會遇到同樣的問題。 我的猜測是istantiate玩家,然後傳遞指istance到CreateEnemey類作爲參數變量,東西沿着這些線路:

class createShip(imports.pygame.sprite.Sprite): 
    def __init__(self): 
     imports.pygame.sprite.Sprite.__init__(self) 
     pass 

class createEnemy(imports.pygame.sprite.Sprite): 
    def __init__(self, player): 
     imports.pygame.sprite.Sprite.__init__(self) 
     self.x_player = player.rect.x 
     self.y_player = player.rect.y 

然後,在循環開始之前:

player = createShip() 

我實際上做過這之前,它的工作原理,而不是通過子類化pygame.sprite.Sprite(我創建了我自己的播放器類)。