2017-06-13 5 views
0

Ich versuche, einen Feind für mein Spiel zu spawnen, und mir wurde gesagt, dass das Aktualisieren meiner Sprite-Gruppe das tun würde. Aus irgendeinem Grund spawnt der Feind überhaupt nicht. Keine Fehler oder irgendetwas erhalten. Hier ist meine Klasse:Nicht sicher, wie man Sprite anzeigt

class Spawn(pygame.sprite.Sprite): 
    def __init__(self,primaryx,primaryy): 
     pygame.sprite.Sprite.__init__(self) 
     global directionM 
     self.directionM=directionM 
     x1=random.randint(100,400) 
     y1=random.randint(100,400) 
     self.x1=x1 
     self.y1=y1 
     self.primaryx=primaryx 
     self.primaryy=primaryy 
    def AIPrototype(self): 
     minionup=pygame.image.load("Alien.png").convert_alpha() 
     miniondown=pygame.image.load("Aliendown.png").convert_alpha() 
     minionleft=pygame.image.load("Alienleft.png").convert_alpha() 
     minionright=pygame.image.load("Alienright.png").convert_alpha() 
     global x,y,posx,posy 
     seperate=random.randint(1,1000) 
     screen.blit(self.directionM,(self.primaryx,self.primaryy)) 
     if seperate==2: 
      self.primaryx=x+100 
     if seperate==20: 
      self.primaryx=x-100 
     if seperate==150: 
      self.primaryy=y+100 
     if seperate==200: 
      self.primaryy=y-100 
     self.x1=self.primaryx 
     self.y1=self.primaryy 
     if self.x1<x: 
      xspeed1=1 
      slopex1=x-self.x1 
     if self.x1>x: 
      xspeed1=-1 
      slopex1=self.x1-x 
     if self.y1<y: 
      yspeed1=1 
      slopey1=y-self.y1 
     if self.y1>y: 
      yspeed1=-1 
      slopey1=self.y1-y  
    # 
     hypo1=((slopex1**2)+(slopey1**2))**0.5 
     speedmark1=hypo1/1 
     speedy1=slopey1/speedmark1 
     speedx1=slopex1/speedmark1 
     movex1=speedx1 
     movey1=speedy1 
     if self.x1<=640 and self.x1>=0: 
      if self.x1>x: 
       self.x1+=xspeed1*movex1 
       if self.x1<x: 
        xspeed1=0 
     if self.y1<=480 and self.x1>=0: 
      if self.y1>y: 
       self.y1+=yspeed1*movey1 
       if self.y1<y: 
        yspeed1=0 
     if self.x1<=640 and self.x1>=0: 
      if self.x1<x: 
       self.x1+=xspeed1*movex1 
       if self.x1>x: 
        xspeed1=0 
     if self.y1<=480 and self.x1>=0: 
      if self.y1<y: 
       self.y1+=yspeed1*movey1 
       if self.y1>y: 
        yspeed1=0 
    # 
     if self.x1>640: 
      self.x1=640 
     if self.x1<0: 
      self.x1=0 
     if self.y1>480: 
      self.y1=480 
     if self.y1<0: 
      self.y1=0 
     if self.y1>=posy-20 and self.y1<=posy+20 and self.x1>=x-20 and self.x1<=x+20: 
      Spawn.kill() 
     self.primaryx=self.x1 
     self.primaryy=self.y1 

Und hier ist, wo ich es und alles nennen:

spritegroup = pygame.sprite.Group() 
spawn = Spawn(600,200) 
spritegroup.add(spawn) 
clock = pygame.time.Clock() 
keepGoing = True   

try: 
    while keepGoing: 
     clock.tick(60) 
     screen.fill(THECOLORS['red']) 
     char()#start 
     x+1 
     posxlist.append(x) 
     posylist.append(y) 
     spritegroup.update() 
     spritegroup.draw(screen) 
     pygame.display.flip() 

Wie kann ich Anzeigen/rufen Sie die Sprite? Ich entschuldige mich für meinen unordentlichen und ineffektiven Code. Ich bin neu in der Verwendung von Klassen und Sprites.

Antwort

0

Aufruf spritegroup.update() erzeugt keine neuen Sprites, es ruft die update Methode aller enthaltenen Sprites auf. Da Ihre Sprite-Unterklasse Spawn keine update-Methode hat, hat spritegroup.update() tatsächlich keinen Effekt in Ihrem Programm.

Sie können neue Sprites laichen durch eine Instanz erstellen und es in die Sprite Gruppe hinzufügen, wie Sie hier tat:

spawn = Spawn(600, 200) 
spritegroup.add(spawn) 
+0

Weitere Informationen zu Sprites und Sprite-Gruppen können in [Programm Arcade Spiele] (http: //programarcadegames.com/index.php?chapter=introduction_to_sprites&lang=de#section_13) (das vorhergehende Kapitel handelt von Klassen). – skrx

+0

Aber ich habe das im Code getan, und keine Sprites wurden erzeugt. Recht? – Qartx

+0

Ihre Sprite-Klasse benötigt auch ein 'self.image' (ein pygame.Surface) und ein' self.rect' (ein pygame.Rect) Attribut um korrekt zu funktionieren. Ich habe das übersehen, weil dein Beispiel nicht vollständig war und ich es nicht testen konnte. Sie sollten den Code in Ihrer Frage bearbeiten und ein [minimales, vollständiges und überprüfbares Beispiel] (https://stackoverflow.com/help/mcve) bereitstellen. Und lies das Tutorial, das ich oben verlinkt habe, da es dir die Grundlagen beibringt. – skrx