AS3-Tutorium: Flash: Butterfly 06 external code
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
ButterflyMovie
→Eigenschaften
→Erweitert
aufklappen → Haken vorExport für ActionScript
, Haken vorExport in Bild 1
, Klasse:ButterflyMovie
→OK
→OK
Datei
→Neu
→ActionScript 3.0-Klasse
(CS5) bzw.ActionScript-Datei
(CS4 und früher) →OK
-> Klassenname:ButterflyMovie
Datei
→Datei speichern unter
→ButterflyMovie.as
(im selben Ordner wie die zugehörigefla
-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 →
Eigenschaften
→Erweitert
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
- Kowarschick, W.: Multimedia-Programmierung
- butterfly_06_external_code_2 (Flash CS5)
- butterfly_06_external_code_2 (Flash CS4)
- SVN-Repository (Flash CS5)
- SVN-Repository (Flash CS4)