Ich will gerade "properties" testen, und stoße aber auf ein Problem bezüglich der Setter-Methode. in der Klasse Jaeger, welche Sprite als Metaklasse verwendet wird bei image = "Schuss.bmp" die Settermethode nicht aufgerufen.
Bei self.rect = self.image.get_rect() die Getter-Methode aber schon. Er beschwert sich dann, dass __Bild nicht vorhanden sei.
Was mich auch verwundert ist, dass bei self.rect = self.image.get_rect() ein zusätlicher Parameter übergeben wird. In den ganzen Beispielen die ich gefunden habe, wird der Getter-Methode kein Parameter übergeben.
Warum funktioniert mein Ansatz nicht? Hab ich was wichtiges übersehen?
Code: Alles auswählen
#-----------------------------------------------
class Sprite(type):
#-----------------------------------------------
def __init__(cls, name, bases, dict):
#´´´´´´´´´´´´´´´´´´´´´
cls.image = property(cls._erhalte_Bild, cls._lade_Bild)
def start(cls, Periodendauer):
#´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´
cls.Gruppe = pg.sprite.Group()
cls.Periodendauer = Periodendauer
cls.Startzeit = pg.time.get_ticks()
#cls.image.convert()
def _lade_Bild(cls, Wert):
#´´´´´´´´´´´´´´´´´´´´´´´´´´´´
cls.__Bild = pg.image.load("data/Grafiken/" + Wert)
cls.__Bild.convert()
def _erhalte_Bild(cls, obj):
#´´´´´´´´´´´´´´´´´´´´´´´´´
return cls.__Bild
def erneuern(cls, Ereignisse):
#´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´
Status = pg.time.get_ticks() - cls.Startzeit > cls.Periodendauer
if Status:
cls.Startzeit = cls.Periodendauer
cls.Gruppe.update(Status, Ereignisse)
def ausgeben(cls, Ziel):
#´´´´´´´´´´´´´´´´´´´´´´´´´´´
cls.Gruppe.draw(Ziel)
#-----------------------------------------------
class Schuss(pg.sprite.Sprite):
#-----------------------------------------------
__metaclass__ = Sprite
image = "Schuss.bmp"
def __init__(self, x, y):
#´´´´´´´´´´´´´´´´´´´´´´´´´´´
pg.sprite.Sprite.__init__(self)
self.rect = self.image.get_rect()
self.midbottom = x, y
self.Gruppe.add(self)
def update(self, Status, Ereignisse):
#´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´
if Status == True:
self.rect.top += 1;
if self.rect.bottom < 0:
self.Gruppe.remove(self)
#-----------------------------------------------
class Jaeger(pg.sprite.Sprite):
#-----------------------------------------------
__metaclass__ = Sprite
image = "Gegner.png"
def __init__(self, x):
#´´´´´´´´´´´´´´´´´´´´´´´´
pg.sprite.Sprite.__init__(self)
self.rect = self.image.get_rect()
self.midbottom = x, -self.rect.height
self.Gruppe.add(self)
def update(self, Status, Ereignisse):
#´´´´´´´´´´´´´´´´´´´´´´´´´´´
if Status == True:
self.rect.top -= 1;
if self.rect.top > 240:
self.Gruppe.remove(self)
#-----------------------------------------------
if __name__ == "__main__":
#-----------------------------------------------
pg.init()
bildschirm = pg.display.set_mode((320,240))
spielstatus = True
Jaeger(50)
Jaeger.start(3000)
while spielstatus:
ereignisse = pg.event.get()
for ereignis in ereignisse:
if ereignis.type == QUIT: spielstatus = False
Jaeger.erneuern(ereignisse)
Jaeger.ausgeben(bildschirm)
pg.display.flip()