2016-05-29 7 views
1

Ich habe eine pygame.sprite.group für meine Feinde gemacht. Ich kann sie auf dem Bildschirm anzeigen, aber ich weiß nicht, wie man sie alle bewegen lässt? Ich möchte, dass sie auf den Plattformen hin und her gehen (wie links und rechts ständig). Ich weiß, wie man mit den Bewegungen eines Sprites arbeitet, aber nicht einen Haufen in einer Gruppe. HierWie kann man eine Pygame-Sprite-Gruppe bewegen?

ist, was ich habe jetzt:

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() 

Der Rest ist im Grunde wie meine Statusänderungen und Updates. Ich weiß nicht, wie man die gesamte Sprite-Gruppe bewegt. Ich weiß, wie man ein Sprite bewegt, aber nicht einen Haufen Sprites in einer Liste.

Antwort

0

Ich würde zwei neue Attribute zu Ihrem Feind Klasse vorstellen: dx und Plattform. dx ist die aktuelle Geschwindigkeit in x-Richtung und Plattform ist die Plattform der Feind ist auf. Sie müssen die Plattform als Argument für Ihr Feindobjekt übergeben, was kein Problem sein sollte (geben Sie es einfach bei der Erstellung der Plattform und des Gegners ein). Your Enemy Klasse sieht nun wie folgt aus:

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 

Da Ihre Feinde erben pygame.sprite.Sprite Sie das Update() -Methode mit so etwas wie dies überschreiben könnte:

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 

Was Sie jetzt tun können Rufen Sie einfach die Sprite-Gruppe enemy_list.update() in Ihrer Spiel-Schleife an, die die Update-Methode aller Ihrer Gegner aufrufen wird, damit sie sich bewegen.

Ich weiß nicht, wie der Rest Ihres Projekts aussieht, aber das sollte funktionieren, wenn Sie den Code berücksichtigen, den Sie bereitgestellt haben. Was du später tun kannst ist, die Zeit in der Update-Methode zu verstreichen, so dass deine Gegner sich nicht aufgrund der fps, sondern nach Zeit bewegen. Die Methode pygame.sprite.Group.update() akzeptiert alle Argumente, solange alle Objekte in dieser Gruppe eine Aktualisierungsmethode mit denselben Argumenten haben.

Weitere Informationen finden Sie in dieser talk oder lesen Sie die pygame docs.