Seite 1 von 1
verständniss problem liste Leeren
Verfasst: Dienstag 13. Mai 2008, 17:36
von sea-live
Guten tag
beim erzeugen meiner aliens in den verschiedenen LEVEL
wird immer nur das erste image aus images geladen
und die images liste wird länger bei levelwechsel
PROBLEM
wird nicht bei jedem Alien eine eigene IMAGESLISTE erstellt
Code: Alles auswählen
class Alien(pygame.sprite.Sprite):
speed = -3
shotprob = 100
gun = (-6, 16)
health = 4
frame = 0
animcycle = 8
images = []
def __init__(self):
pygame.sprite.Sprite.__init__(self, self.containers)
self.level = LEVEL
if self.level ==1:
self.images.append(load_image_alpha('TieA.bmp', -1))
self.images.append(load_image_alpha('TieB.bmp', -1))
if self.level == 3:
self.images.append(load_image_alpha('Trooper_a.bmp', -1))
self.images.append(load_image_alpha('Trooper_b.bmp', -1))
if self.level == 5:
self.images.append(load_image_alpha('Borgc.png', -1))
self.images.append(load_image_alpha('Borgd.png', -1))
self.image = self.images[0]
Verfasst: Dienstag 13. Mai 2008, 17:43
von sea-live
wenn ich das so programmiere dann tut das API was ich möchte
jedoch hat das objekt dann alle bilder geladen
Code: Alles auswählen
class Alien(pygame.sprite.Sprite):
speed = -3
shotprob = 100
gun = (-6, 16)
health = 4
frame = 0
animcycle = 8
images = []
def __init__(self):
pygame.sprite.Sprite.__init__(self, self.containers)
self.level = LEVEL
self.images.append(load_image_alpha('TieA.bmp', -1))
self.images.append(load_image_alpha('TieB.bmp', -1))
self.images.append(load_image_alpha('Trooper_a.bmp', -1))
self.images.append(load_image_alpha('Trooper_b.bmp', -1))
self.images.append(load_image_alpha('Borgc.png', -1))
self.images.append(load_image_alpha('Borgd.png', -1))
self.image = self.images[0]
if self.level == 3:self.image = self.images[2]
if self.level == 5:self.image = self.images[4]
self.shoot = load_sound('Alien Shot.wav')
self.die_sound = load_sound('die2.wav')
self.x = random.randrange(450 - 12)
self.x += 150
self.y = random.randrange(480 - 12)
self.rect = self.image.get_rect(center = (self.x, self.y))
Re: verständniss problem liste Leeren
Verfasst: Dienstag 13. Mai 2008, 17:43
von keppla
Ohne jetzt aus deiner Erklärung direkt schlau zu werden: bist du dir sicher, dass die Eigenschaften health, frame wirklich Klassen- und nicht Objekteigenschaften sein sollen?
Falls du mit IMAGELISTE alieninstance.images meinst: das ist auch eine klasseneigenschaft, und wird somit von allen Aliens geteilt.
Verfasst: Dienstag 13. Mai 2008, 18:14
von sea-live
DANKE DAS WARS
der unterschied war mir nicht klargeworden!
Verfasst: Dienstag 13. Mai 2008, 18:19
von EyDu
Hui, das schreit ja geradezu nach einer LC:
Code: Alles auswählen
self.images = [load_image_alpha(x, -1) for x in ["TieA.bmp", "TieB.bmp", "Trooper_a.bmp", "Trooper_b.bmp", "Borgc.png", "Borgd.png"]]
Verfasst: Dienstag 13. Mai 2008, 19:19
von Hyperion
Wobei man die Liste zuvor als Variable definieren sollte - alleine schon aus Gründen der leichteren Anpassbarkeit (wenn man das sowieso nicht in eine config-Datei auslagern möchte).
Problem dabei ist nun aber noch, dass nur bei einem bestimmten Level etwas geladen werden soll. Ich glaube zwar nicht, dass es in diesem Falle um das Ressourcensparen geht, aber auf Deine Art ginge das nicht so leicht
Verfasst: Dienstag 13. Mai 2008, 19:23
von EyDu
Hyperion hat geschrieben:Wobei man die Liste zuvor als Variable definieren sollte - alleine schon aus Gründen der leichteren Anpassbarkeit (wenn man das sowieso nicht in eine config-Datei auslagern möchte).
Das ist klar, aber in so einem kurzen Beispiel sieht eine Variable überfflüssig aus
Hyperion hat geschrieben:Ich glaube zwar nicht, dass es in diesem Falle um das Ressourcensparen geht, aber auf Deine Art ginge das nicht so leicht
Doch, man mache aus der Funktion einfach eine Instanz eines Textureloaders, welcher callable ist (man will seinen Code ja nicht anpassen
). Der soll sich dann darum kümmern.
Verfasst: Mittwoch 14. Mai 2008, 17:28
von sea-live
ein riesen vorteil bei der variante
mit dem images = []
wenn nur 2 jeweils drinn sind ist die umschaltung des anycycluses
da es nur images[0] bzw [1] gibt
Code: Alles auswählen
self.rect = self.image.get_rect(center = (self.x, self.y))
self.frame += 1
self.image = self.images[self.frame/self.animcycle%2]
der fehler war nur das problem das die images liste eine classenliste und nicht eine objectliste war
deswegen verständnissproblem im ersten post von mir
DANKE für mich ist das problem gelöst