AS3-Tutorium: Flash: Butterfly 08 character

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg

Dieser Artikel ist veraltet und wird künftig evtl. entfernt.

Dieser Artikel erfüllt die GlossarWiki-Qualitätsanforderungen nur teilweise:

Korrektheit: 4
(großteils überprüft)
Umfang: 3
(einige wichtige Fakten fehlen)
Quellenangaben: 5
(vollständig vorhanden)
Quellenarten: 5
(ausgezeichnet)
Konformität: 4
(sehr gut)

AS3-Tutorium: Butterfly: Flash | Flex

Flash: Übersicht | Teil 1 | Teil 2 | Teil 3 | Teil 4 | Teil 5 | Teil 6 | Teil 7a | Teil 7b | Teil 7c | Teil 8 | Teil 9 | Teil 10

Dieser Artikel wird derzeit von einem Autor gründlich bearbeitet. Die Inhalte sind daher evtl. noch inkonsistent.

Eine zweite Spielfigur

<swf width="367" height="267">http://glossar.hs-augsburg.de/beispiel/tutorium/flash_cs5/butterfly/butterfly_08_character/Butterfly08Flash11.swf</swf> Musterlösung (Flash CS5) (SVN-Repository)

Musterlösung (Flash CS4) (SVN-Repository)


Nachdem im siebten Teil des Tutoriums das Schmetterlingssymbol in eine Spielfigur umgewandelt wurde, wird nun auch das Symbol ButterflyMovie als Klasse von Viewobjekten mit wohldefinierter Schmittstelle implementiert. Dabei wird insbesondere die Progammlogik (fliegen einer via roundsToFly vorgegebenen Anzahl von Runden) aus der Klasse ButterflyMovie in die Hauptklasse Main verlagert.

Das Datenmodell

Folgendes Klassendiagramm wird in diesem Teil des Tutorium realisiert:

Ordner mit StarUML-Diagramm und von StarUML erzeugtem AS3-Code-Rahmen (SVN-Repository)

Es gibt zwei Klassen zur Visualisierung einer Spielfigur (so genannte View-Klassen):

  • Butterfly, eine Spielfigur, die sich nicht selbstständig vom Platz bewegt, aber verschiedene Zustände annehmen kann.
  • ButterflyMovie, eine animierte Spielfigur, die sich auf vordefinierten Bahnen bewegt und auch verschiedene Zustände annehmen kann.

Beide Klassen sind, da sie Symbolen zugeordnet werden, Subklassen der ActionScript-Klasse MovieClip.

Die Attribute und die Signale der Klasse Butterfly wurden bereits in Teil 7 des Tutorium ausführlich beschrieben.

Ein Schmetterlingsmovie kann vier Zustände annehmen:

  • wartend (WAITING)
  • herumfliegend (FLYING_AROUND)
  • wegfliegend (FLYING_AWAY)
  • von außerhalb zum Warteplatz fliegend (FLYING_IN)

Dieser Zustand kann über das Attribut state gelesen und modifiziert werden. Mit Hilfe des Attributs stateAnimation kann erfragt werden, in welchem Zustand sich die Animation gerade befindet. Dieses Attribut ändert sich jeweils zum Ende einer Flugsequenz. Das heißt, das Attribut kann insgesamt sieben Werte annehmen:

  • wartend (WAITING)
  • herumfliegen wurde beendet (END_FLYING_AROUND)
  • wegfliegen wurde beendet (END_FLYING_AWAY)
  • zum Warteplatz fliegen wurde beendet (END_FLYING_IN)

Der Schmetterlingsmovie informiert ebenfalls mittels Signalen interessierte Beobachter sowohl dann, wenn sich der Zustand (state) ändert, als auch dann, wenn sich der Zustand der Animation (stateAnimation) ändert, d.h., wenn eine Flugsequenz beendet wird. Hierfür wird die Klasse ButterflyMovieEvent verwendet.

Auf das Schmetterlingsobjekt, dass dem Schemtterlingsmovie zugeordnet ist, kann von außen nicht zugegriffen werden: Die Beziehung wurde als private definiert. Wäre ein Direktzugriff möglich, so könnte man z.B. das Flügelschlagen während des Rundfluges deaktivieren. Außerdem würde der Direktzugriff Verletzungen des Gesetzes von Demeter zulassen.

Als Ersatz für den fehlenden Direkzugriff werden zwei weitere Attribute angeboten:

  • butterflyState: definiert den Fügelzustand für den wartenden Schmetterling (offen, geschlossen, flatternd); wenn er fliegt, flatter er immer
  • butterflyStateAnimation: gibt den aktuellen Flügelzustand preis: offen oder geschlossen

Da auf das Schmetterlingsobjekt nicht direkt zugegriffen werden kann, signalisiert der Schmetterlingsmovie auch die Zustandsänderungen des Schmetterlingsobjektes.

Hier sieht man ein Problem, das sich bei der Beachtung des Gesetzes von Demeter ergibt, sehr deutlich. Ein Objekt, das keinen Direktzugriff auf ein ihm zugeordnetes Objekt ermöglicht, muss als Adapter (Wrapper) für dieses Objekt implementiert werden. Dies hat zur Folge, dass zusätzlicher Code geschrieben werden muss, der im Wesentlichen nichts weiter macht, als Nachrichten weiterzuleiten.

Hier hat diese Vorgehen allerdings einen entscheidenden Vorteil: Es ist dem Benutzer der Klasse ButterflyMovie nicht möglich, das Verhalten des Schmetterling in einem unpassenden Augenblick (d.h. während des Fluges) zu verändern.

Im Allgemeinen ist Code, der hilft, Programmierfehler zu vermeiden, Code vorzuziehen, der aufgrund des geringeren Overheads etwas effizienter ist.

Der Schmetterlings-Movie als Spielfigur

TO BE DONE

Probleme der Implementierung

TO BE DONE

Quellen

SVN-Repository-Verweise


Dieser Artikel ist GlossarWiki-konform.