def __init__(self): self.bewegungs_richtung = 1 self.timer = 0 self.timer_grenze = 400 self.modus = Schaf.MODUS_GRASSEND self.entfuerendes_ufo = None # Fallschirm bild hinzufügen und zunächst verstecken self.fallschirm = BildSpeicher.gib_bild("fallschirm") self.fallschirm.verstecke() # Animation initialsieren super().__init__( [(BildSpeicher.gib_pygame_bild("schaf_1"), 500), (BildSpeicher.gib_pygame_bild("schaf_2"), 500)] ) self.setze_position(random.randint(0, Spiel.breite), Schaf.schaf_hoehe) self.start() self.setze_wiederhole(True)
def __init__(self): pygame_ufo = BildSpeicher.gib_pygame_bild("ufo") x = random.randint(0, Spiel.breite - pygame_ufo.get_width()) super().__init__(x, 0, pygame_ufo) self.text = UfoUndSchafeSpiel.neues_wort(self, 0, -30, self.zerstoert) self.such_strahl = BildAnimationSpeicher.gib_animation("such_strahl") self.such_strahl.start() self.such_strahl.setze_wiederhole() self.such_strahl.verstecke() self.timer = 20 self.bewegungs_richtung = 1 if random.randint(0, 1) == 1 else -1 self.entfuertes_schaf = None self.modus = Ufo.MODUS_RUNTERFLIEGEN self.nach_vorne()
def __init__(self, pygame_flaechen_und_zeiten, wiederhole=False, alpha=True, anzeige_dauer=STANDART_ZEIT): """ Ein neues Animationsobjekt. :param pygame_flaechen_und_zeiten: :type pygame_flaechen_und_zeiten: list[] :param wiederhole: :type wiederhole: bool :param alpha: :type alpha: bool :param anzeige_dauer: :type anzeige_dauer: float :return: :rtype: """ self._wiederhole_animation = wiederhole """ Gibt an ob die Animation wiederholt wird oder nicht """ self._flaechen_zeiten = [] """ :type: list[(ZeichenFlaeche, int)] """ self._zeige_letztes_bild = False self._bild_gewechselt = EreignisBearbeiter() self._animation_gestartet = EreignisBearbeiter() self._animation_geendet = EreignisBearbeiter() self._gesamt_zeit = 0 self._aktuelle_flaeche = 0 self._zustand = GESTOPPT self._vergangen = 0 self._gesamt_zeit = 0 # zur Ermittlung der Dimension breite = 0 hoehe = 0 # Für klone() self.__quelle = pygame_flaechen_und_zeiten.copy() self.__alpha = alpha for zf in pygame_flaechen_und_zeiten: # Entweder Tupel/Liste mit (Bild,Zeit) oder nur Bild if isinstance(zf, list) or isinstance(zf, tuple): animations_bild = zf[0] dauer = zf[1] else: animations_bild = zf dauer = anzeige_dauer # Die Fläche kann entweder aus einer Datei/ dem Bildspeicher geladen werden if isinstance(animations_bild, str): # Falls im Speicher, nehmen wir dieses Bild if BildSpeicher.ist_bild_vorhanden(animations_bild): animations_bild = BildSpeicher.gib_pygame_bild(animations_bild) else: # Ansonsten laden wir es animations_bild = BildSpeicher._lade_pygbild_aus_datei(animations_bild, alpha) # oder schon eine pygame surface sein elif not isinstance(animations_bild, pygame.Surface): raise AttributeError("Entweder Surface oder Strings übergeben.") # die größten werte ermitteln if animations_bild.get_width() > breite: breite = animations_bild.get_width() if animations_bild.get_height() > hoehe: hoehe = animations_bild.get_height() # Zur List hinzufügen und Zeit addieren self._flaechen_zeiten.append((animations_bild, dauer)) self._gesamt_zeit += dauer self.__rotations_flaechen = None self._anzahl_flaechen = len(self._flaechen_zeiten) SkalierbaresElement.__init__(self, self) ZeichenbaresElement.__init__(self, 0, 0, breite, hoehe, None)