Seite 1 von 1

Erweiterte Sprite-Collusion

Verfasst: Donnerstag 10. Juni 2010, 17:33
von lowbob
Ich hab habe einen kleinen Zombie-Shooter programmiert der zwar funktioniert, aber nicht ganz so, wie ich will:

Wenn eine Sprite-Kollesion zwischen dem kugel-sprite und dem zombie-sprite stattfindet, soll der zombie nicht einfach gekillet werden, sonder seine bewegung unterbrochen und das zombie-bild mit einem blutfleck ersetzt werden.

Beide Sprites sind als Gruppe definiert und ich nutze den Befehl "pygame.sprite.groupcollide(shots, zombies, 1, 0)".
Wenn ich den zombie in in der funktion kille, wird verschwindet der getroffene, wenn in aber nicht kille und die bewegung und das bild änderen will, wird ein zufälliger zombie gestoppt und dessem bild ersetzt.

Code: Alles auswählen

class zombie(pygame.sprite.Sprite):
    def __init__(self, spawn_punkt):
        pygame.sprite.Sprite.__init__(self)
        self.image=pygame.image.load("zombie.png").convert_alpha()
        self.rect = self.image.get_rect()
        self.rect.topleft = spawn_punkt
        self.move= True



    def update(self):
        if pygame.sprite.groupcollide(shots, zombies, 1, 0):
            self.move=False
            self.image=pygame.image.load("tot3.png").convert_alpha()
            
            
        if self.move:
            self.rect.move_ip((0, 2))
        else:
             self.rect.move_ip((0, 0))
            
        if self.rect.bottom == 550:
            self.kill()
            global leben
            leben=leben-5

Würde mich über Vorschläge freuen :)

Re: Erweiterte Sprite-Collusion

Verfasst: Freitag 11. Juni 2010, 17:13
von veers
Ich kenn mich nicht wirklich mit PyGame aus, aber im allgemeinen solltest du das in Zwei schritten machen.
Schritt 1: Alle kollisionen erkennen und alle getroffenen Zombies als Tot *markieren*
Schritt 2: Tote Zombies entfernen und neue Sprites für Blutflecken erstellen.

PS: Der Code sieht ziemlich schlimm aus. Sieh dir mal PEP8 an was die Formatierung angeht und beschäftige dich etwas mit Software Architektur und Best Practices. Lass die Zombies Sprites sein und verschiebe die Logik für das abziehen von Leben und lösen von Kollisionen wo anders hin.

Re: Erweiterte Sprite-Collusion

Verfasst: Freitag 11. Juni 2010, 18:03
von Hyperion
Natürlich kommt es ganz auf die Art des Spiels an, ich würde bei pygame meist aber ein Tile-basiertes Datenmodell bevorzugen und diese ganzen Kollisionsprobleme weg von den Sprites verlagern. Evtl. löst das bereits Deine Problematik.

Re: Erweiterte Sprite-Collusion

Verfasst: Freitag 11. Juni 2010, 23:08
von lowbob
Hyperion hat geschrieben:Natürlich kommt es ganz auf die Art des Spiels an, ich würde bei pygame meist aber ein Tile-basiertes Datenmodell bevorzugen und diese ganzen Kollisionsprobleme weg von den Sprites verlagern. Evtl. löst das bereits Deine Problematik.
Danke, das war tatsächlich die Lösung für mein Problem!
Eigentlich hatte ich das vorher auch schon so, jetzt hab ich die kollesions-abfrage aber nach dem updaten der zombie-gruppe gesetzt und jetzt funktioniert es so wie ich es haben wollte.

veers hat geschrieben:Ich kenn mich nicht wirklich mit PyGame aus, aber im allgemeinen solltest du das in Zwei schritten machen.
Schritt 1: Alle kollisionen erkennen und alle getroffenen Zombies als Tot *markieren*
Schritt 2: Tote Zombies entfernen und neue Sprites für Blutflecken erstellen.

PS: Der Code sieht ziemlich schlimm aus. Sieh dir mal PEP8 an was die Formatierung angeht und beschäftige dich etwas mit Software Architektur und Best Practices. Lass die Zombies Sprites sein und verschiebe die Logik für das abziehen von Leben und lösen von Kollisionen wo anders hin.
Ich weiß, ich weiß, der Code sieht wirklich nicht gut aus.
Das Spiel ist als Schul-Projekt gedacht, das letzte mal, dass ich mit python gearbeitet habe ist zwei Jahre her und ich will nicht den ganzen Code in 4 Tagen umschreiben. :oops:

Danke euch beiden! :)