2016-05-29 11 views
1

私は敵のためにpygame.sprite.groupを作った。 私はそれらを画面に表示することができますが、それらをすべて動かす方法はわかりません。 私はそれらをプラットフォーム上で前後にペーシングさせたいと思っています(常に左と右のように)。 私は、1つのスプライトの動きを扱う方法を知っていますが、グループ内の束ではありません。ここでパイガムスプライトグループの移動方法は?

は、私が今持っているものです。

class Platform(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.image.load('levoneplatform.png') 
     self.rect = self.image.get_rect() 

class Enemy(pygame.sprite.Sprite): 

    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.image.load('enemy.png') 
     self.rect = self.image.get_rect() 

class LevOne(): 
    def __init__(self): 

     self.background_image = pygame.image.load('night.png').convert_alpha() 


     platforms_one = [ (200,300), 
         (50,500), 
         (550,650), 
         (300,200), 
         (120,100) 
        ] 
     for k,v in platforms_one: 
      platform = Platform() 
      enemy = Enemy() 
      platform.rect.x = k 
      enemy.rect.x = k 
      platform.rect.y = v 
      enemy.rect.y = v - 44 
      platform_list.add(platform) 
      enemy_list.add(enemy) 

    def update(self): 
     screen.blit(self.background_image, [0, 0]) 

screen = pygame.display.set_mode((800,600)) 
enemy_list = pygame.sprite.Group() 
platform_list = pygame.sprite.Group() 

残りは私の状態の変更や更新のように基本的にあります。 スプライトグループ全体を移動する方法がわかりません。私は1つのスプライトを移動する方法を知っていますが、スプライトの束は1つのリストに入れません。

答えて

0

あなたの敵のクラスには、dxプラットフォームの2つの新しい属性が導入されます。 dxは現在のx方向の速度であり、プラットフォームは敵がいるプラットフォームです。プラットフォームを引数として敵オブジェクトに渡す必要があります。これは問題ではありません(プラットフォームと敵を作成するときに渡すだけです)。あなたの敵のクラスは次のようになります:

class Enemy(pygame.sprite.Sprite): 

    def __init__(self, platform): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.image.load('enemy.png') 
     self.rect = self.image.get_rect() 
     self.dx = 1 # Or whatever speed you want you enemies to walk in. 
     self.platform = platform 

あなたの敵は、あなたがこのようなものでupdate()メソッドを上書きする可能性がpygame.sprite.Sprite継承しているので:

class Enemy(pygame.sprite.Sprite): 

    def __init__(self, platform): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.image.load('enemy.png') 
     self.rect = self.image.get_rect() 
     self.dx = 1 # Or whatever speed you want you enemies to walk in. 
     self.platform = platform 

    def update(self): 
     # Makes the enemy move in the x direction. 
     self.rect.move(self.dx, 0) 

     # If the enemy is outside of the platform, make it go the other way. 
     if self.rect.left > self.platform.rect.right or self.rect.right < self.platform.rect.left: 
       self.dx *= -1 

あなたは今何ができますかあなたのゲームループ内のスプライトグループenemy_list.update()を呼び出すだけで、すべての敵の更新メソッドを呼び出して移動させます。

あなたのプロジェクトの残りの部分の様子はわかりませんが、これはあなたが提供したコードを考慮して動作するはずです。後で行うことができるのは、updateメソッドで時間を過ぎて、敵がfpsに基づいて移動するのではなく、時間によって移動するようにすることです。 pygame.sprite.Group.update()メソッドは、そのグループ内のすべてのオブジェクトが同じ引数を持つupdateメソッドを持っている限り、引数をとります。

詳細については、talkをチェックするか、pygame docsをお読みください。

関連する問題