AS3-Tutorium: Flash: Butterfly 06 external code

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

Verbesserung der vierten Version des Schmetterling-Movies

In AS3-Tutorium: Flash: Butterfly 05 external code wurde der Code aus der Hauptzeitleiste in eine Klasse ausgelagert. Nun soll auch noch der Code vom Schmetterlings-Movie so weit wie möglich ausgelagert werden (ohne das Verhalten des Filmes zu ändern.)

<swf width="367" height="267">http://glossar.hs-augsburg.de/beispiel/tutorium/flash_cs5/butterfly/butterfly_06_external_code_2/butterfly_06_external_code_2.swf</swf> Musterlösung: butterfly_06_external_code_2.swf

Der Code des Schmetterlingsmovies wird ausgelagert

Achtung: Die scripts-Ebene des Butterfly-Movies wird — im Gegensatz zur scripts-Ebene des Main-Movies — nicht gelöscht. Der ActionScript-Code wird allerdings deutlich vereinfacht: In einem Frame steht zum Schluss höchstens ein Methodenaufruf (siehe weiter unten).

  • In der Bibliothek: Doppelklick auf das Icon vor dem Symbol ButterflyMovie → Die Definition des Symbols wird in der Bühne geöffnet.
  • In der Bibliothek: Rechtsklick auf das Icon vor dem Symbol ButterflyMovieEigenschaftenErweitert aufklappen → Haken vor Export für ActionScript, Haken vor Export in Bild 1, Klasse: ButterflyMovieOKOK
  • DateiNeuActionScript 3.0-Klasse (CS5) bzw. ActionScript-Datei (CS4 und früher) → OK -> Klassenname: ButterflyMovie
  • DateiDatei speichern unterButterflyMovie.as (im selben Ordner wie die zugehörige fla-Datei.)

In die Datei ButterflyMovie.as wird folgender Code eingefügt:

package
{
  import flash.display.MovieClip;

  public class ButterflyMovie extends MovieClip
  {
    /////////////////////////////////////////////////////////////////////////////
    // Attributes
    /////////////////////////////////////////////////////////////////////////////
    
    public var roundsToFly: int = 0;

    /////////////////////////////////////////////////////////////////////////////
    // Constructor
    /////////////////////////////////////////////////////////////////////////////
    
    public function ButterflyMovie()
    {
      stop();
    }
    
    /////////////////////////////////////////////////////////////////////////////
    // Methods called from within the timeline
    /////////////////////////////////////////////////////////////////////////////

    public function testNumberOfRounds(): void
    {
      if (roundsToFly == 0)
        gotoAndPlay("lbEnd");
    }

    public function decrementNumberOfRounds(): void
    {
      roundsToFly--;
//    if (roundsToFly > 0)
      gotoAndPlay("lbStart");
    }
		
    /////////////////////////////////////////////////////////////////////////////
    // End of class
    /////////////////////////////////////////////////////////////////////////////
  }
}

Die öffentlich zugängliche Zustandasvariable roundsToFly wurde in die Klasse verlagert. Außerdem wurden zwei Methoden definiert, die den Test-Code aus der Zeitleiste des Butterfly-Movies enthalten (wobei die zweite If-Bedingung überflüssig ist und daher auskommentiert wurde).

Der stop-Befehle aus dem ersten Frame wurde in den Konstruktor ausgelagert.

Damit kann der Code in der Zeitleiste auf drei simple Methodenaufrufe reduziert werden:

Frame 1
kein Code mehr
Frame 2
testNumberOfRounds();
Frame 150
decrementNumberOfRounds();
Frame 220
stop();

Export in Bild 1

miniatur|350px|Verknüpfen einer Klasse mit einem Symbol Wie oben gezeigt wurde, kann eine Klasse mit einem Symbol ganz einfach werknüpft werden:

  • In der Bibliothek: Rechtsklick auf das Icon vor dem gewünscheten Symbol → EigenschaftenErweitert aufklappen

Daraufhin erscheint das rechts abgebildete Menü.

Der Menü-Punkt Export in Bild 1 sollte immer dann gewählt werden, wenn die Chance besteht, dass keine zugehörigen Objekte direkt auf der Bühne abgelegt werden, sondern nur zur Laufzeit mit Hilfe von new ButterflyMovie erzeugt werden sollen.

Der Grund ist, dass der ActionScript-Compiler bestrebt ist, möglichst kleine SWF-Dateien zu erzeugen. Er analisiert dazu, welche Objekte (direkt oder innerhalb anderer Movie Clips) auf der Bühne liegen und fügt nur den Code für diejenigen Symbole ein, die auf der Bühne auch tatsächlich verwendet werden.

Wenn nun für ein Symbol keine Objekte auf der Bühne liegen, wird der zugehörige Code auch nicht in die SWF-Datei eingefügt. Das heißt, wenn dann später mit Hilfe von new ein Objekt für dieses Symbol erstellt werden soll, stürtzt die SWF-Datei mit einer Fehlermeldung ab.

Dieses Problem kann man beheben, indem man einfach ein unsichtbares Objekt für dieses Symbol auf die Bühne legt, bevor der Compiler eine SWF-Datei erzeugt. Genau diese Arbeit nimmt einen Flash ab, wenn man einen Haken vor die Option Export in Bild 1 aktiviert.

Sie sollten allerdings darauf achten, dass die Bibliothke keine Symbole enthält, bei denen diese Option aktiviert ist, die aber gar nicht in Ihrem Movie verwendet werden. Dies hätte nämlich zur Folge, dass sich die SWF-Datei unnötig aufbläht, weil der Code für alle diese Symbole mit eingebunden wird.

Mehrere Movie-Clips mit der Klasse ButterflyMovie verknüpfen

<swf width="367" height="267">http://glossar.hs-augsburg.de/beispiel/tutorium/flash_cs5/butterfly/butterfly_06_external_code_2/multi/butterfly_06_external_code_2_multi.swf</swf> Erweiterte Musterlösung: butterfly_06_external_code_2_multi.swf


Der Menü-Punkt

Quellen


Dieser Artikel ist GlossarWiki-konform.