AS3-Tutorium: Flex: Butterfly 01 fluttering: Unterschied zwischen den Versionen

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Kowa (Diskussion | Beiträge)
Die Seite wurde neu angelegt: „{{AS3-Tutorium:Flex:Butterfly:Menü}} {{In Bearbeitung}} =Flatternder Schmetterling= Im ersten Teil des Tutoriums wird ein Schmetterling erzeugt, der mit den Fl…“
 
Kowa (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
 
(71 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
{{AS3-Tutorium:Flex:Butterfly:Menü}}
{{AS3-Tutorium:Flex:Butterfly:Menü}}
{{In Bearbeitung}}
==Flatternder Schmetterling==
=Flatternder Schmetterling=


Im ersten Teil des Tutoriums wird ein Schmetterling erzeugt, der mit den Flügeln schlägt.
Im ersten Teil des Flex-Tutoriums wird der Schmetterling aus '''Flash'''-Tutorium „[[AS3-Tutorium: Flash: Butterfly 01 fluttering|Butterfly 01 fluttering]]“
 
in eine Flex-Anwendung eingebunden.
Der Schmetterling wird mit Hilfe einer Vektorgrafik dargestellt. Im Folgenden werden zwei Alternativen präsentiert:
* Zeichnen des Schmetterlings mittels Vektor-Werkzeugen, die in Flash enthalten sind.
* Zeichnen des Schmetterlings mittels eines Vektorzeichenprogramms; Importieren und Weiterverarbeiten dieser Grafik in Flash.
<noinclude>
<noinclude>


<swf width="367" height="267">http://glossar.hs-augsburg.de/beispiel/tutorium/flash_cs5/butterfly/butterfly_01_fluttering_multi/butterfly_01_fluttering_multi.swf</swf>
<swf width="367" height="267">http://glossar.hs-augsburg.de/beispiel/tutorium/flex_4__flash_cs5/butterfly/Butterfly01Flex4Flash11/swf/Butterfly01Flex4Flash11.swf</swf>
'''[http://glossar.hs-augsburg.de/beispiel/tutorium/flash_cs5/butterfly/butterfly_01_fluttering_multi/ Erweiterte Musterlösung (Flash CS5)]'''
'''[http://glossar.hs-augsburg.de/beispiel/tutorium/flex_4__flash_cs5/butterfly/Butterfly01Flex4Flash11/ Musterlösung (Flex 4/Flash CS5)]'''
([http://glossar.hs-augsburg.de/webdav/tutorium/flash_cs5/butterfly/butterfly_01_fluttering_multi/ SVN-Repository])
([http://glossar.hs-augsburg.de/webdav/tutorium/flex_4__flash_cs5/butterfly/Butterfly01Flex4Flash11/ SVN-Repository])


'''[http://glossar.hs-augsburg.de/beispiel/tutorium/flash_cs4/butterfly/butterfly_01_fluttering_multi/ Erweiterte Musterlösung (Flash CS4)]'''
'''[http://glossar.hs-augsburg.de/beispiel/tutorium/flex_4__flash_cs4/butterfly/Butterfly01Flex4Flash10/ Musterlösung (Flex 4/Flash CS4)]'''
([http://glossar.hs-augsburg.de/webdav/tutorium/flash_cs4/butterfly/butterfly_01_fluttering_multi/ SVN-Repository])
([http://glossar.hs-augsburg.de/webdav/tutorium/flex_4__flash_cs4/butterfly/Butterfly01Flex4Flash10/ SVN-Repository])
</noinclude>
</noinclude>


==Schmetterlingssymbol mit Flash-Vektorwerkzeugen erstellen==
===Ein neues Flex-Projekt===
<noinclude>
 
# Flash Builder 4 (deutsche Version) starten.
# Die Flash-Perspektive öffenen: <code>Fenster</code> → <code>Perspektive öffnen</code> → <code>Andere...</code> → <code>Flash</code>.
# Ein neues Flex-Projekt erzeugen: <code>Datei</code> → <code>Neu</code> → <code>Flex-Projekt</code> → Projektname: <code>Butterfly01Flex</code> → <code>Fertig stellen</code>.
# Im Editor-Fenster von Eclipse ist die Datei <code>Butterfly01Flex.mxml</code> geöffnet. Diese Datei kann durch einen Doppelklick auf <code>Butterfly01Flex</code> → <code>src</code> → <code>(Standardpaket)</code> → <code>Butterfly01Flex.mxml</code> im Fenster <code>Paket-Explorer</code> (links oben in der Standardperspektive) jederzeit geöffnet werden.
# Im Editor-Fenster der Datei <code>Butterfly01Flex.mxml</code> in den Quelle-Modus wechseln: Klick auf den Button <code>Quelle</code> (sofern dieser Button nicht bereits selektiert ist).
# Im Editor-Fenster der Datei <code>Butterfly01Flex.mxml</code>: <code>minWidth="955" minHeight="600"</code> durch <code>width="550" height="400"</code> ersetzen.
# Wenn gewünscht wird, dass sich die Darstellungsgröße der SWF-Datei der Flex-Anwendung an die Größe des Ausgabefensters anpasst: Direkt hinter <code>width="550" height="400"</code> folgendes Attribut einfügen: <code>applicationComplete="stage.scaleMode=StageScaleMode.SHOW_ALL"</code>.
# Im Editor-Fenster der Datei <code>Butterfly01Flex.mxml</code> in den Design-Modus wechseln: Klick auf den Button <code>Design</code>. (Der Wechsel in den Design-Modus dauert bei ersten Mal i. Allg. etwas länger.)
# Die Komponente <code>Label</code> aus dem Fenster <code>Komponenten</code> (links oben, zweiter Reiter in der Standardperspektive) in das Editorfenster ziehen.
# Den Inhalt des Labels im Editor-Fenster in <code>Butterfly 01 (Flex)</code> abändern (Doppelklick mit der linken Maustaste).
# Die Schriftgröße und -art kann, wenn die <code>Label</code>-Komponente per Mausklick selektiert wurde, im Fenster <code>Eigenschaften</code> (rechts unten, erster Reiter in der Standardperspektive) abgeändert werden.
 
===Schmetterlingssymbol aus Flash CS5 in Flex integrieren===
 
# Im ''Flash Builder'', Editor-Fenster der Datei <code>Butterfly01Flex.mxml</code> in den Design-Modus wechseln: Klick auf den Button <code>Design</code>.
# Im ''Flash Builder'', Editorfenster (Design-Modus) der Datei <code>Butterfly01Flex.mxml</code>: Komponente <code>Flash Professional-Komponente</code> (aus Fenster <code>Komponenten</code> → </code>Benutzerdefiniert</code>) auf die Bühne ziehen.
# Im ''Flash Builder'': Neue Flash-Komponente erstellen: Entweder Doppelklick auf Komponentensymbol im Editor oder Einfachklick auf Komponentensymbol im Editor + Klick auf <code>In Flash Professional erstellen...</code> im Fenster <code>Eigenschaften</code> (rechts unten in der Standardperspektive) → Klassenname: <code>Butterfly</code>, SWC-Dateiname: <code>Butterfly01Flash.swc</code> ⇒ Die Datei <code>Butterfly01Flash.fla</code> wird von Flex automatisch erstellt und in einen neuen Ordner namens <code>assets</code> abgelegt.
# In der Bibliothek von ''Adobe Flash'': Symbol <code>Butterfly</code> löschen.
# In ''Adobe Flash'': Ihre Lösung <code>Butterfly01Flash.fla</code> oder die Musterlösung <code>[http://glossar.hs-augsburg.de/beispiel/tutorium/flash_cs5/butterfly/butterfly_01_fluttering/Butterfly01Flash11.fla Butterfly01Flash11.fla]</code> von [[AS3-Tutorium: Flash: Butterfly 01 fluttering]] öffnen (eventuell befinden sich jetzt zwei Dateien mit demselben Namen in Flash; verwechseln Sie sie nicht).
# In ''Adobe Flash'': In der Bibliothek der Musterlösung <code>Butterfly01Flash.fla</code> bzw. <code>Butterfly01Flash11.fla</code>: Alle Ordner und Symbole markieren → <code>Strg-C</code> (<code>Strg-C</code>).
# In ''Adobe Flash'': In der Bibliothek der von Flex erstellten <code>fla</code>-Datei <code>Butterfly01Flash.fla</code>, die kopierten Symbole und Ordner einfügen: <code>Strg-V</code> (<code>Strg-V</code>).
# In ''Adobe Flash'': In der Bibliothek der von Flex erstellten  <code>Butterfly01Flash.fla</code>: Symbol <code>Butterfly</code> selektieren.
# In ''Adobe Flash'': In der Menüleiste der von Flex erstellten  <code>Butterfly01Flash.fla</code>: <code>Befehle</code> → <code>Symbol in Flex-Komponente konvertieren</code> ⇒ Das Icon von Butterfly ändert sich: Fx auf schwarzem Grund.
# In ''Adobe Flash'', die von Flex erstellte Datei <code>Butterfly01Flash.fla</code>: <code>Datei</code> → <code>Speichern</code>.
# In ''Adobe Flash'', links oben auf der Bühne: Klick auf Button <code>Fertig</code> ⇒ Im Flex-Ordner <code>assets</code> wird die Datei <code>Butterfly01Flash.swc</code> erstellt; diese wird automatisch in den Ordner <code>lib</code> kopiert.
# Im ''Flash Builder'', Editorfenster (Design-Modus) der Datei <code>Butterfly01Flex.mxml</code>: Sofern die Komponente <code>Flash Professional-Komponente</code> noch vorhanden ist: Diese entfernen.
# Im ''Flash Builder'', Editorfenster: Sofern sich die Komponente <code>Butterfly</code> noch nicht auf der Bühne befindet: Diese (aus Fenster <code>Komponenten</code> → </code>Benutzerdefiniert</code>) auf die Bühne ziehen
# Im ''Flash Builder'', Editorfenster: Die Komponente  <code>Butterfly</code> evtl. positionieren und skalieren.
 
'''Tipp:''' Sollte es beim Start einer Flex-Anwendung zu unerklärlichen Fehlern kommen, hilft oft:
* In der Menüleiste (ganz oben): <code>Projekt</code> → <code>Bereinigen...</code>.
 
===Schmetterlingssymbol aus Flash CS3, Flash CS4 oder Flash CS5 (Alternative zu oben) in Flex integrieren===
 
'''Voraussetzung:''' Ein neues Flex-Projekt wurde gemäß der Anleitung von Abschnitt [[#Ein_neues_Flex-Projekt|Ein neues Flex-Projekt]] erstellt.
 
Die folgende Beschreibung funktioniert sowohl für Flash CS4, als auch für Flash CS5 und sollte auch für Flash CS3 funktionieren.
 
# Im ''Flash Builder'', <code>Paket-Explorer</code>: Klick mit rechter Maustaste auf den Projektordner <code>Butterfly01Flex</code> → <code>Neu</code> → <code>Ordner</code> → Ordnername: <code>assets</code> (Schreibweise ist bei Flash CS5 wichtig) → <code>Fertig stellen</code>.
# Im ''Flash Builder'', <code>Paket-Explorer</code>: Klick mit rechter Maustaste auf den Ordner <code>assets</code> → <code>Importieren</code> → <code>Allgemein</code> (Ordner durch Klick Dreiecksicon öffnen) → <code>Dateisystem</code> → <code>Weiter</code> → <code>Aus Verzeichnis</code>: hier den Ordner mit Ihrer Lösung oder der Lösung von [[AS3-Tutorium: Flash: Butterfly 01 fluttering]] wählen → Häckchen vor <code>fla</code>-Datei mit Flash-Musterlösung (<code>Butterfly01Flash.fla</code>) → <code>Fertig stellen</code>.
# Im ''Flash Builder'', <code>Paket-Explorer</code>: Die <code>fla</code>-Datei im Ordner <code>assets</code> durch Doppelklick in ''dobe Flash'' öffnen.
# In der Bibliothek von ''Adobe Flash'': Symbol <code>Butterfly</code> selektieren.
# In ''Adobe Flash'': <code>Befehle</code> → <code>Symbol in Flex-Komponente konvertieren</code> (in Flash CS4 gibt es diesen Befehl nur, wenn das Plugin <code>Flex Component Kit</code> installiert wurde; siehe [[AS3-Tutorium: Flex: Butterfly#Flash_Builder_4_und_Flash_CS4|Übersicht]]) ⇒ Das Icon von Butterfly ändert sich: Fx auf schwarzem Grund..
# In ''Adobe Flash'': <code>Datei</code> → <code>Speichern</code>.
# In ''Adobe Flash'': <code>Datei</code> → <code>Veröffentlichen</code>.
# Im ''Flash Builder'', <code>Paket-Explorer</code>: Klick mit rechter Maustaste auf den Projektordner <code>Butterfly01Flex</code> → <code>Aktualisieren</code>.
# Im ''Flash Builder'', <code>Paket-Explorer</code>: Neu erstellte <code>swc</code>-Datei (<code>Butterfly01Flash.swc</code>) vom Ordner <code>assets</code> in den Ordner <code>lib</code> verschieben.
# Im ''Flash Builder'', Editorfenster (Design-Modus) der Datei <code>Butterfly01Flex.mxml</code>: Komponente <code>Butterfly</code> (aus Fenster <code>Komponenten</code> → </code>Benutzerdefiniert</code>) auf die Bühne ziehen .
# Im ''Flash Builder'', Editorfenster: Die Komponente  <code>Butterfly</code> evtl. positionieren und skalieren.
 
'''Tipp:''' Sollte es beim Start einer Flex-Anwendung zu unerklärlichen Fehlern kommen, hilft oft:
* In der Menüleiste (ganz oben): <code>Projekt</code> → <code>Bereinigen...</code>.
 
===Probleme und Lösungen===
 
'''Problem''': Es wird keine <code>swc</code>-Datei erstellt, obwohl im Flash-Menü <code>Veröffentlichen</code> ausgeführt
oder der Button <code>Fertig</code> geklickt wurde.
 
'''Lösung''': <code>Datei</code> →<code>Einstellungen für Veröffentlichungen...</code> → Reiter <code>Flash</code> → Häckchen vor <code>SWC exportieren</code> → <code>OK</code>


<swf width="183" height="133">http://glossar.hs-augsburg.de/beispiel/tutorium/flash_cs5/butterfly/butterfly_01_fluttering/butterfly_01_fluttering.swf</swf>
===Anwendung testen===
'''[http://glossar.hs-augsburg.de/beispiel/tutorium/flash_cs5/butterfly/butterfly_01_fluttering/ Musterlösung (Flash CS5)]'''
# Auf Icon <code>Ausführen Als...</code> (fünftes Icon links oben: weißes Dreieck in grünem Kreis)  klicken → <code>Webanwendung</code> → <code>OK</code>.
([http://glossar.hs-augsburg.de/webdav/tutorium/flash_cs5/butterfly/butterfly_01_fluttering/ SVN-Repository])
# Wenn die Datei <code>Butterfly01Flex.mxml</code> nicht per <code>Strg-S</code> (<code>Ctrl-S</code>) oder <code>Datei</code> → <code>Speichern</code> gesichert wurde, erscheint nun der Dialog <code>Speichern und starten</code> in dem die zu speichernden Dateien selektiert sind. Hier ist es sinnvoll die Option <code>Ressourcen vor den Start immer speichern</code> zu selektieren (damit dieser Dialog künftig nicht mehr angezeigt wird) und anschließend <code>OK</code> zu klicken.
# Im Standard-Browser öffnet sich die Flash-Anwendung.


'''[http://glossar.hs-augsburg.de/beispiel/tutorium/flash_cs4/butterfly/butterfly_01_fluttering/ Musterlösung (Flash CS4)]'''
Im Allgemeinen ist es nicht notwendig, die Anwendung immer im Browser zu starten. Der Standalone-Flash-Player ist für Testzwecke i.Allg. vollkommen ausreichend. Ob die Debug-Version im Browser oder im Standalone-Flash-Player gestartet wird, kann man in den Projekteigenschaften festlegen.
([http://glossar.hs-augsburg.de/webdav/tutorium/flash_cs4/butterfly/butterfly_01_fluttering/ SVN-Repository])
</noinclude>


# Neues Flash-Dokument erzeugen: <code>butterfly.fla</code>.
* Im <code>Paket-Explorer</code>: Klick mit rechter Maustaste auf dem Projektordner <code>Butterfly01Flex</code> → <code>Eigenschaften</code> <code>Flex Compiler</code> <code>HTML-Wrapper-Datei generieren</code> → kein Häckchen (⇒ Anwendung wird im Standalone-Flash-Player gestartet; Häckchen Anwendung wird im Browser gestartet) → <code>OK</code> <code>OK</code>.
# Flügel malen (z.B. geeignete Farbe wählen, Freihandwerkzeug, Stiftwerkzeug, Farbeimerwerkzeug).
# Die Flügel kopieren (Markieren, <code>Strg-c</code>, <code>Strg-v</code>) und spiegeln (<code>Modifizieren → Transformieren → Horizontal spiegeln</code>).
# '''Alles selektieren, <code>F8</code> drücken → neuen Movie-Clip erzeugen, Name: <code>Wings</code>''' ⇒ Bibliothek enthält ein Symbol namens <code>Wings</code>.
# In der Bibliothek: Klick auf rechte Maus-Taste → <code>Neuer Ordner</code> → <code>Name</code>: <code>ButterflyAssets</code>.
# Das Symbol <code>Wings</code> in den Ordner <code>ButterflyAssets</code> verschieben.
# Auf der Bühne: Flügel-Objekt löschen.
# In der Bibliothek: Klick auf rechte Maus-Taste → <code>Neues Symbol</code> → <code>Name</code>: <code>Butterfly</code>.
# Das Symbol <code>Butterfly</code> in den Ordner <code>ButterflyAssets</code> verschieben.
# In der Bibliothek: Doppel-Klick auf Icon vor dem Namen <code>Butterfly</code> Auf der Bühne wird <code>Butterfly</code> geöffnet.
# Zwei Ebenen anlegen:
#* <code>wings</code>
#* <code>body</code>
# Die Ebene <code>wings</code> aktivieren.
# Das Symbol <code>Wings</code> auf die Bühne ziehen. Dabei sollte die linke obere Ecken der [[Bounding Box]] des Symbols <code>Wings</code> im Registrierungspunkt (das ist das Kreuz auf der Bühne) zum Liegen kommen, um später den so genannten Flash-Builder-Bounding-Box-Fehler zu vermeiden (siehe Abbildung).[[Medium:Flash Builder Bounding Box Error.png|miniatur|361px|Flash-Builder-Bounding-Box-Fehler]]
# Die Ebene <code>body</code> aktivieren.
# Einen Körper zeichnen (dabei können die Flügel gegebenenfalls temporär ausgeblendet werden).
# Wenn die Bounding Box des Rumpfes nach oben über die Bounding Box der Flügel hinausragt, sollten der der Rumpf und die Flügel um den Differenzbetrag der beiden Boxen nach unten verschoben werden, um sicherzustellen, dass die linke obere Ecke der Bounding Box des gesamten Schmetterlings wieder im Registrieungspunkt zum Liegen kommt.


Der zuvor erwähnte Flash-Builder-Bounding-Box-Fehler tritt im [[Flash Builder]] auf, wenn ein Flash-Symbol, dessen linke obere Ecke der Bounding Box nicht mit dem Registrierungspunkt übereinstimmt,
Man kann die Anwendung auch im Debug-Modus starten (viertes Icon links oben: ein symbolisierter Käfer (= Bug)). In diesem Fall werden Fehlermeldung und trace-Ausgaben (<code>trace("Text, der nur im Debug-Modus angezeigt wird")</code>) im Fenster <code>Konsole</code> (unterhalb des Editor-Fensters in der Srandardansicht) ausgegeben.
in eine Flex-Komponente (<code>mx.flash.UIMovieClip</code>) umgewandelt wird, um das Symbol in einer Flex-Anwendung einsetzen zu können.
Die Umwandlung eines Flash-Symbols in eine Flex-Komponente wird in [[AS3-Tutorium: Flex: Butterfly 01 fluttering]] beschrieben.


Der Ordner <code>ButterflyAssets</code> wurde angelegt, um von Anfang
Für den Debuggingmodus sind allerdings besondere Flash-Player notwendig. Diese können unter [http://www.adobe.com/support/flashplayer/downloads.html http://www.adobe.com/support/flashplayer/downloads.html] heruntergeladen werden, sofern der Flash Builder meldet, dass kein geeigneter Flash-Player gefunden werden kann.
an eine gewisse Ordnung in der Bibliothek zu gewährleisten.
Anderenfalls findet man sich sehr schnell nicht mehr zurecht,  
da die Zahl der Symbole und Grafiken selbst bei kleinen Flash-Filmen
rasant anwächst.


==Alternative: Schmetterlingssymbol mit einem Vektor-Zeichenprogramm erstellen==
==Erweiterung: Kreis-Animation mit ActionScript==
<noinclude>
<noinclude>


<swf width="183" height="133">http://glossar.hs-augsburg.de/beispiel/tutorium/flash_cs5/butterfly/butterfly_01_fluttering_ai/butterfly_01_fluttering_ai.swf</swf>
<swf width="367" height="267">http://glossar.hs-augsburg.de/beispiel/tutorium/flex_4__flash_cs5/butterfly/Butterfly01CircleFlex4Flash11/swf/Butterfly01CircleFlex4Flash11.swf</swf>
'''[http://glossar.hs-augsburg.de/beispiel/tutorium/flash_cs5/butterfly/butterfly_01_fluttering_ai/ Musterlösung (Flash CS5)]'''
'''[http://glossar.hs-augsburg.de/beispiel/tutorium/flex_4__flash_cs5/butterfly/Butterfly01CircleFlex4Flash11/ Musterlösung (Flex 4/Flash CS5)]'''
([http://glossar.hs-augsburg.de/webdav/tutorium/flash_cs5/butterfly/butterfly_01_fluttering_ai/ SVN-Repository])
([http://glossar.hs-augsburg.de/webdav/tutorium/flex_4__flash_cs5/butterfly/Butterfly01CircleFlex4Flash11/ SVN-Repository])


'''[http://glossar.hs-augsburg.de/beispiel/tutorium/flash_cs4/butterfly/butterfly_01_fluttering_ai/ Musterlösung (Flash CS4)]'''
'''[http://glossar.hs-augsburg.de/beispiel/tutorium/flex_4__flash_cs4/butterfly/Butterfly01CircleFlex4Flash10/ Musterlösung (Flex 4/Flash CS4)]'''
([http://glossar.hs-augsburg.de/webdav/tutorium/flash_cs4/butterfly/butterfly_01_fluttering_ai/ SVN-Repository])
([http://glossar.hs-augsburg.de/webdav/tutorium/flex_4__flash_cs4/butterfly/Butterfly01CircleFlex4Flash10/ SVN-Repository])
</noinclude>
</noinclude>


Erstellen Sie mit einem Vektor-Zeichenprogramm eine Schmetterlingszeichnung. Flash unterstützt eine Reihe von Vektor-Grafikformaten:
Im Gegensatz zu Flash bietet der Flash Builder keine Möglichkeit Timeline-Animationen grafisch zu erstellen.
*[[Freehand]]: <code>.fh</code>, <code>.fh7</code>, <code>.fh8</code>, <code>.fh9</code>, <code>.fh10</code> etc.
Mann kann allerdings Animationen mit Hilfe von ActionScript programmieren. (Es gibt sogar die Möglichkeit, in Flash eine
*[[Illustrator]]: <code>.ai</code>, <code>.fxg</code>, <code>.eps</code>
Animation als ActionScript-Code zu exportieren und diese dann in Flex einzusetzen.)
*[[AutoCAD]]: <code>.dxf</code>
 
*[[Windows Metafile]]: <code>.wmf</code>, <code>.emf</code>
Wenn der folgende Code in die Datei <code>Butterfly01Flex.mxml</code> (im Quellenmodus) eingefügt wird,
* etc.
fliegt der Schmetterling auf einer Kreisbahn und wirft dabei sogar einen Schatten.
 
'''Tipp:''' Eventuell ist besser, zunächst den [[AS3-Tutorium: Flex: Butterfly 02 fixed number of rounds|zweiten Teil des Flex-Tuitoriums]] 
zu bearbeiten, bevor Sie sich diese erweiterte Musterlösung des ersten Teil näher ansehen. Der MXML-Code des zweiten Teils ist deutlich einfacher.
 
<source lang="mxml" enclose="div">
<?xml version="1.0" encoding="utf-8"?>
<s:Application
  xmlns:fx="http://ns.adobe.com/mxml/2009"
  xmlns:s="library://ns.adobe.com/flex/spark"
  xmlns:mx="library://ns.adobe.com/flex/mx"
  xmlns:std="*"
  width="550" height="400"
  applicationComplete="o_init()"
>
  <fx:Style source="css/main.css"/>
 
  <s:Label
    x="110" y="5"
    text="Butterfly 01 Circle (Flex 4/Flash CS4)"
  />
  <std:Butterfly
    id="sp_butterfly_movie"
    x="275" y="50" rotation="90"
    width="125.55" height="93.8"
  />


Falls Flash den Import von Ebenen unterstützt (wie z.B. bei <code>.fh</code>, <code>.ai</code> und <code>.fxg</code>), erstellen Sie eine Datei
  <fx:Script>
mit mindestens zwei Ebenen: eine Ebene für den Rumpf (<code>body</code>) und eine oder zwei Ebenen für die Flügel (<code>wings</code>).
    <![CDATA[
Anderenfalls müssten Sie zwei Dateien erstellen: eine enthält den Rumpf und die andere die Flügel.
</source>
<source lang="actionscript3">
      import flash.filters.DropShadowFilter;
     
      private const c_x0:      Number = 275;
      private const c_y0:      Number = 200;
      private const c_r:      Number = 150;
      private const c_delta:  Number = 1.0/64;
     
      private const c_filters: Array = [new DropShadowFilter(30,45,0,0.8)];
     
      private var v_phi: Number = 0;
     
      private function o_init(): void
      {
        // Scale the stage, when the output Window is scaled.
        this.stage.scaleMode=StageScaleMode.SHOW_ALL;
       
        // Add a shadow to the butterfly!
        sp_butterfly_movie.filters = c_filters;


Am Beispiel der Datei [http://glossar.hs-augsburg.de/webdav/tutorium/flash_cs5/butterfly/butterfly_01_fluttering/ai/butterfly.ai butterfly.ai] (Autor: Sonja Kowarschick)
        this.addEventListener(Event.ENTER_FRAME, o_move_butterfly); 
wird die Erstellung eines Schmetterlings-Symbols im Folgenden beschrieben:
      }
     
      private function o_move_butterfly(p_event: Event): void
      {
        sp_butterfly_movie.x = c_x0 + Math.sin(v_phi)*c_r;
        sp_butterfly_movie.y = c_y0 - Math.cos(v_phi)*c_r;
       
        if (v_phi >= 2*Math.PI)
          v_phi = Math.PI*c_delta;
        else
          v_phi += Math.PI*c_delta;
       
        sp_butterfly_movie.rotation = v_phi*180/Math.PI+90;
      }
</source>
<source lang="mxml" enclose="div">
    ]]>
  </fx:Script>
</s:Application>
</source>


===Version 1: <code>butterfly_01_fluttering_ai</code> ===
===Anmerkungen===
# In der Bibliothek: Klick auf rechte Maus-Taste → <code>Neuer Ordner</code> → <code>Name</code>: <code>ButterflyAssetsAI</code>.
Die Hauptbühne wird in einem Flex-Web-Projekt mit Hilfe der Spark-Komponente <code>Application</code> definiert.
# Importieren Sie [http://glossar.hs-augsburg.de/webdav/tutorium/flash_cs5/butterfly/butterfly_01_fluttering/ai/butterfly.ai butterfly.ai]: <code>Datei</code> → <code>Importieren</code> → <code>In Bibliothek importieren</code> → <code>Ebenen konvertieren in: Flash-Ebenen</code>.
In einem Flex-Air-Projekt müsste die Komponente <code>WindowedApplication</code> verwendet werden.
# In der Bibliothek: Grafik-Symbol <code>butterfly.ai</code> in den Ordner <code>ButterflyAssets</code> verschieben.
# In der Bibliothek: Doppel-Klick auf Icon vor dem Grafik-Symbol <code>butterfly.ai</code> ⇒ Auf der Bühne wird <code>butterfly.ai</code> geöffnet.
# Auf der Bühne: Körper selektieren, <code>F8</code> drücken und Symbol <code>BodyAI</code> erzeugen.
# Auf der Bühne: <strong>Beide Flügel</strong> selektieren, <code>F8</code> drücken und Symbol <code>WingsAI</code> erzeugen.
# Die Symbole <code>BodyAI</code> und <code>WingsAI</code> in den Ordner <code>ButterflyAssetsAI</code> verschieben.
# In der Bibliothek: Klick auf rechte Maus-Taste → <code>Neues Symbol</code> → <code>Name</code>: <code>ButterflyAI</code>.
# Das Symbol <code>ButterflyAI</code> in den Ordner <code>ButterflyAssetsAI</code> verschieben.
# In der Bibliothek: Doppel-Klick auf Icon vor dem Namen <code>ButterflyAI</code> ⇒ Auf der Bühne wird <code>ButterflyAI</code> geöffnet.
# Zwei Ebenen anlegen:
#* <code>wings</code>
#* <code>body</code>
# Die Ebene <code>wings</code> aktivieren.
# Das Symbol <code>WingsAI</code> auf die Bühne ziehen, dabei sollte das Kreuz auf der Bühne im Rumpfschwerpunkt zum liegen kommen.
# Die Ebene <code>body</code> aktivieren.
# Das Symbol <code>BodyAI</code> auf die Bühne an die richtige Position ziehen.


===Version 2: <code>butterfly_01_fluttering_ai2</code> ===
Im öffnenden Tag dieser Komponente werden vier Namespaces definiert:
*<code>s</code>: Der Namespace für die moderneren Spark-Komponenten (existieren seit Flex 4; setzen mindestens eine [[Flash Player]] der Version 10 voraus)
*<code>mx</code>: Der Namespace für die alten MX-Komponenten (existieren seit Flex 2; sollten nur noch verwendet werden, wenn es keine Spark-Komponenten als Ersatz gibt)
*<code>fx</code>: Der Namespace für alle nicht-grafischen Flex-Elemente, wie z.B. AS3-Scripts, CSS-Style-Anweisungen etc.
*<code>std</code>: Der Namespace für das Standard-Package. (Im Flash-Builder wird dafür automatisch das Kürzel <code>ns1</code> vergeben, wenn das Kürzel <code>std</code> nicht zuvor definiert wurde.)


# In der Bibliothek: Klick auf rechte Maus-Taste → <code>Neuer Ordner</code> → <code>Name</code>: <code>ButterflyAssetsAI</code>.
Die Komponente <code>Butterfly</code> liegt im Standard-Package, da in Flash unter <code>Eigenschaften</code> → <code>Klasse</code> kein anderes Package angegeben wurde. Bei der <code>Label</code>-Komponente handelt es sich dagegen um eine Spark-Kompnente; ihr wird daher der Namespace
# Importieren Sie [http://glossar.hs-augsburg.de/webdav/tutorium/flash_cs5/butterfly/butterfly_01_fluttering/ai/butterfly.ai butterfly.ai]: <code>Datei</code> → <code>Importieren</code> → <code>In Bibliothek importieren</code> → <code>Ebenen konvertieren in: Flash-Ebenen</code>. Beim Import einer Vektorgrafik wird ein Baum mit allen Grafik-Ebenen angezeigt (siehe nachfolgende Abbildung), aus denen diejenigen ausgewählt werden können, für die Flash beim Import automatisch MovieClips erstellen soll. Wenn man dies für die beiden Flügel und den Körper macht, kann man im Folgenden bei der Erzeugung von <code>WingsAI</code> und <code>ButterflyAI</code> auf diese Symbole zurückgreifen.[[Medium:Flash CS5 Butterfly AI Import.png|miniatur|650px|Import einer AI-Vektordatei in Flash]]
<code>s</code> zugewiesen.  
# In der Bibliothek: Grafik-Symbol <code>butterfly.ai</code> und den Ordner <code>butterfly.ai Elemente</code> in den Ordner <code>ButterflyAssets</code> verschieben.
# In der Bibliothek: Klick auf rechte Maus-Taste → <code>Neues Symbol</code> → <code>Name</code>: <code>WingsAI</code>.
# In der Bibliothek: Doppel-Klick auf Icon vor dem Namen <code>WingsAI</code> ⇒ Auf der Bühne wird <code>WingsAI</code> geöffnet.
# Die Grafik <code>butterfly.ai</code> aus der Bibliothek in <code>WingsAI</code> einfügen und die linke obere Ecke des Schmetterlings am Ankerpunkt (Kreuz) von <code>WingsAI</code> ausrichten.
# In <code>WingsAI</code> zweite Ebene anlegen.
# Die MovieClips <code>WingAI left</code> und <code>WingAI right</code> aus der Bibliothek (im Ordner <code>butterfly.ai Elemente</code>) in die soeben angelegte Ebene kopieren.
# Die beiden Flügel-Symbole an der Schmetterlingsgrafik <code>butterfly.ai</code> ausrichten (<code>Ansicht</code> → <code>Vorschaumodus</code> → <code>Konturen</code>).
# Die erste Ebene samt der Schmetterlingsgrafik <code>butterfly.ai</code> aus <code>WingsAI</code> löschen.
# Die Symbole <code>BodyAI</code> und <code>WingsAI</code> in den Ordner <code>ButterflyAssetsAI</code> verschieben.
# In der Bibliothek: Klick auf rechte Maus-Taste → <code>Neues Symbol</code> → <code>Name</code>: <code>ButterflyAI</code>.
# Das Symbol <code>ButterflyAI</code> in den Ordner <code>ButterflyAssetsAI</code> verschieben.
# In der Bibliothek: Doppel-Klick auf Icon vor dem Namen <code>ButterflyAI</code> ⇒ Auf der Bühne wird <code>ButterflyAI</code> geöffnet.
# Zwei Ebenen anlegen:
#* <code>wings</code>
#* <code>body</code>
# Die Ebene <code>wings</code> aktivieren.
# Das Symbol <code>WingsAI</code> auf die Bühne ziehen, dabei sollte das Kreuz auf der Bühne im Rumpfschwerpunkt zum liegen kommen.
# Die Ebene <code>body</code> aktivieren.
# Das Symbol <code>BodyAI</code> auf die Bühne an die richtige Position ziehen.


==Flügel schlagen mit „modernen“ Tweens (ab Flash 10)==
Um von ActionScript aus auf das Schmetterlingsobjekt zugreifen zu können, wird ihm der Identifikator <code>sp_butterfly_movie</code> zugeweisen.
# In der Zeitleiste der Ebene <code>body</code>: '''<code>Bild</code>''' bei Frame 21 einfügen (rechter Mausklick → <code>Bild einfügen</code>).
Das Attribut <code>id</code> im öffnenden Tag einer MXML-Komponente entspricht dem Attribut <code>name</code> („Instanzname“),
# In der Zeitleiste der Ebene <code>wings</code>: '''<code>Bild</code>''' bei Frame 21 einfügen (rechter Mausklick → <code>Bild einfügen</code>).
das einem Objekt auf der Bühne in Flash zugewiesen werden kann.  
# In der Zeitleiste der Ebene <code>wings</code>: rechter Mausklick auf Balken in der Zeitleiste → <code>Bewegungs-Tween erstellen</code>.
# In der Zeitleiste der Ebene <code>wings</code>: rechter Mausklick auf Frame 21 → <code>Schlüsselbild einfügen</code> → <code>Skalierung</code>.
# In der Zeitleiste der Ebene <code>wings</code>: rechter Mausklick auf Frame 11 → <code>Schlüsselbild einfügen</code> → <code>Skalierung</code>.
# Klick auf das Icon <code>Frei transformieren (Q)</code> (drittes Icon von oben in der Werkzeugleiste).
# Die Bounding Box des Flügels mit Hilfe des Anfassers in der Mitte der linken oder rechten Seite schmal ziehen (Achtung: Der Absspielkopf muss auf Frame 11 stehen).


Die Schritte 1 und 2 können auch gleichzeitig durchgeführt werden, indem die Bilder 21 beider Ebenen selektiert werden, bevor die Aktion
Sobald die Flex-Anwendung vollständig gestartet wurde und insbesondere auch die Hauptbühne <code>stage</code> erstellt wurde,
"rechter Mausklick → <code>Bild einfügen</code>" ausgeführt wird.
signalisiert die Komponente <code>Application</code> bzw. <code>WindowedApplication</code> dies mit dem Ereignis <code>ApplicationComplete</code>.
(Im Gegensatz dazu wird <code>CreationComplete</code> bereits signalisiert, wenn die Hauptbühne <code>stage</code> noch nicht initialisiert, d.h. gleich <code>null</code> ist.)


==Flügel schlagen mit klassischen Tweens (ab Flash 6)==
Im obigen Beispiel wird veranlasst, dass die [[Observer Pattern|Observer]]-Methode <code>o_init</code> aufgerufen wird,
# In der Zeitleiste der Ebene <code>body</code>: '''<code>Bild</code>''' bei Frame 21 einfügen (rechter Mausklick → <code>Bild einfügen</code>).
sobald das Ereignis <code>ApplicationComplete</code> eintritt.
# In der Zeitleiste der Ebene <code>wings</code>: '''<code><strong>Schlüssel</strong>bild</code>''' bei Frame 21 einfügen  (rechter Mausklick → <code>Schlüsselbild einfügen</code>).
Die Methode <code>o_init</code> sorgt zunächst dafür,
# In der Zeitleiste der Ebene <code>wings</code>: Tween einfügen (rechter Mausklick auf einen Frame '''vor'''' Frame 20 → je nach Flash-Version: <code>Klassisches Tween erstellen</code> bzw. <code>Tween einfügen</code>).
dass sich die Größe der Bühne an die Größe des Ausgabefensters anpasst.  
# In der Zeitleiste der Ebene <code>wings</code>: '''<code>Schlüsselbild</code>''' bei Frame 11 einfügen  (rechter Mausklick → <code>Schlüsselbild einfügen</code>).
(Dafür ist es notwendig, dass <code>stage</code> bereits initialisiert wurde.)
# Klick auf das Icon <code>Frei transformieren</code> (drittes Icon von oben in der Werkzeugleiste).
# Die Bounding Box des Flügels mit Hilfe des Anfassers in der Mitte der linken oder rechten Seite schmal ziehen (Achtung: Der Absspielkopf muss auf Frame 11 stehen).


==Schmetterling testen==
Da es sich bei <code>ButterflyMovie</code> um ein Objekt der Klasse <code>MovieClip</code> handelt, kann man dem Schmetterling
ein Array mit Filtern zuweisen, wie zum Beispiel einen Filter, der einen Schattenwurf simuliert (<code>new DropShadowFilter(30,45,0,0.8)</code>).


# Auf <code>Szene 1</code> in der linken oberen Ecke der Bühne klicken.
Zu guter Letzt wird in der Methode <code>o_init</code> festgesetzt, dass bei jedem <code>ENTER_FRAME</code>-Event (also jede vierundzwanstigstel Sekunde, wenn Framerate 24 Bilder pro Sekunde betraägt) die Observer-Methode <code>o_move_butterfly</code> aufgerufen wird. Diese Methode berechnet jeweils
# Das Symbol <code>Butterfly</code> auf die Bühne ziehen.
die neue Position des Schmetterlings (auf einer Kreisbahn) und dreht den Schmetterling (<code>sp_butterfly_movie.rotation</code>) in Flugrichtung.
# Den Film mit <code>Strg-Return</code> (<code>Ctrl-Return</code>) starten.


=Quellen=
==Quellen==
<noinclude>
<noinclude>
* [[Kowarschick, W.: Multimedia-Programmierung]]</noinclude>
* [[Kowarschick, W.: Multimedia-Programmierung]]</noinclude>
* [http://glossar.hs-augsburg.de/beispiel/tutorium/flex4_cs5/butterfly/butterfly_01_fluttering/ Musterlösung (Flex 4/Flash CS5)]
* [http://glossar.hs-augsburg.de/beispiel/tutorium/flex_4__flash_cs5/butterfly/Butterfly01Flex4Flash11/ Musterlösung (Flex 4/Flash CS5)]
* [http://glossar.hs-augsburg.de/beispiel/tutorium/flex4_cs4/butterfly/butterfly_01_fluttering/ Musterlösung (Flex 4/Flash CS4)]
* [http://glossar.hs-augsburg.de/beispiel/tutorium/flex_4__flash_cs4/butterfly/Butterfly01Flex4Flash10/ Musterlösung (Flex 4/Flash CS4)]
* [http://glossar.hs-augsburg.de/beispiel/tutorium/flex_4__flash_cs5/butterfly/Butterfly01CircleFlex4Flash11/ Erweiterte Musterlösung (Kreisflug, Flex 4/Flash CS5)]
* [http://glossar.hs-augsburg.de/beispiel/tutorium/flex_4__flash_cs4/butterfly/Butterfly01CircleFlex4Flash10/ Erweiterte Musterlösung (Kreisflug, Flex 4/Flash CS4)]


== [[Subversion/HowTo|SVN]]-Repository-Verweise ==
=== [[Subversion/HowTo|SVN]]-Repository-Verweise ===
* [http://glossar.hs-augsburg.de/webdav/tutorium/flex4_cs5/butterfly/butterfly_01_fluttering/ Musterlösung (Flex 4/Flash CS5)]
* [http://glossar.hs-augsburg.de/webdav/tutorium/flex_4__flash_cs5/butterfly/Butterfly01Flex4Flash11/ Musterlösung (Flex 4/Flash CS5)]
* [http://glossar.hs-augsburg.de/webdav/tutorium/flex4_cs4/butterfly/butterfly_01_fluttering/ Musterlösung (Flex 4Flash CS4)]
* [http://glossar.hs-augsburg.de/webdav/tutorium/flex_4__flash_cs4/butterfly/Butterfly01Flex4Flash10/ Musterlösung (Flex 4/Flash CS4)]
* [http://glossar.hs-augsburg.de/webdav/tutorium/flex_4__flash_cs5/butterfly/Butterfly01CircleFlex4Flash11/ Erweiterte Musterlösung (Kreisflug, Flex 4/Flash CS5)]
* [http://glossar.hs-augsburg.de/webdav/tutorium/flex_4__flash_cs4/butterfly/Butterfly01CircleFlex4Flash10/ Erweiterte Musterlösung (Kreisflug, Flex 4/Flash CS4)]
<noinclude>
<noinclude>
[[Kategorie: AS3-Tutorium: Flex: Butterfly]][[Kategorie: Flex-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]
[[Kategorie: AS3-Tutorium: Flex: Butterfly]][[Kategorie: Flex-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]
{{{{SITENAME}}-konformer Artikel}}
{{{{SITENAME}}-konformer Artikel}}
</noinclude>
</noinclude>

Aktuelle Version vom 1. März 2023, 13:25 Uhr

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: 5
(ausgezeichnet)

AS3-Tutorium: Butterfly: Flash | Flex

Flex: Übersicht | Teil 1 | Teil 2 | Teil 3 | Teil 4 | Teil 5

Flatternder Schmetterling

Im ersten Teil des Flex-Tutoriums wird der Schmetterling aus Flash-Tutorium „Butterfly 01 fluttering“ in eine Flex-Anwendung eingebunden.


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

Musterlösung (Flex 4/Flash CS4) (SVN-Repository)


Ein neues Flex-Projekt

  1. Flash Builder 4 (deutsche Version) starten.
  2. Die Flash-Perspektive öffenen: FensterPerspektive öffnenAndere...Flash.
  3. Ein neues Flex-Projekt erzeugen: DateiNeuFlex-Projekt → Projektname: Butterfly01FlexFertig stellen.
  4. Im Editor-Fenster von Eclipse ist die Datei Butterfly01Flex.mxml geöffnet. Diese Datei kann durch einen Doppelklick auf Butterfly01Flexsrc(Standardpaket)Butterfly01Flex.mxml im Fenster Paket-Explorer (links oben in der Standardperspektive) jederzeit geöffnet werden.
  5. Im Editor-Fenster der Datei Butterfly01Flex.mxml in den Quelle-Modus wechseln: Klick auf den Button Quelle (sofern dieser Button nicht bereits selektiert ist).
  6. Im Editor-Fenster der Datei Butterfly01Flex.mxml: minWidth="955" minHeight="600" durch width="550" height="400" ersetzen.
  7. Wenn gewünscht wird, dass sich die Darstellungsgröße der SWF-Datei der Flex-Anwendung an die Größe des Ausgabefensters anpasst: Direkt hinter width="550" height="400" folgendes Attribut einfügen: applicationComplete="stage.scaleMode=StageScaleMode.SHOW_ALL".
  8. Im Editor-Fenster der Datei Butterfly01Flex.mxml in den Design-Modus wechseln: Klick auf den Button Design. (Der Wechsel in den Design-Modus dauert bei ersten Mal i. Allg. etwas länger.)
  9. Die Komponente Label aus dem Fenster Komponenten (links oben, zweiter Reiter in der Standardperspektive) in das Editorfenster ziehen.
  10. Den Inhalt des Labels im Editor-Fenster in Butterfly 01 (Flex) abändern (Doppelklick mit der linken Maustaste).
  11. Die Schriftgröße und -art kann, wenn die Label-Komponente per Mausklick selektiert wurde, im Fenster Eigenschaften (rechts unten, erster Reiter in der Standardperspektive) abgeändert werden.

Schmetterlingssymbol aus Flash CS5 in Flex integrieren

  1. Im Flash Builder, Editor-Fenster der Datei Butterfly01Flex.mxml in den Design-Modus wechseln: Klick auf den Button Design.
  2. Im Flash Builder, Editorfenster (Design-Modus) der Datei Butterfly01Flex.mxml: Komponente Flash Professional-Komponente (aus Fenster Komponenten → Benutzerdefiniert) auf die Bühne ziehen.
  3. Im Flash Builder: Neue Flash-Komponente erstellen: Entweder Doppelklick auf Komponentensymbol im Editor oder Einfachklick auf Komponentensymbol im Editor + Klick auf In Flash Professional erstellen... im Fenster Eigenschaften (rechts unten in der Standardperspektive) → Klassenname: Butterfly, SWC-Dateiname: Butterfly01Flash.swc ⇒ Die Datei Butterfly01Flash.fla wird von Flex automatisch erstellt und in einen neuen Ordner namens assets abgelegt.
  4. In der Bibliothek von Adobe Flash: Symbol Butterfly löschen.
  5. In Adobe Flash: Ihre Lösung Butterfly01Flash.fla oder die Musterlösung Butterfly01Flash11.fla von AS3-Tutorium: Flash: Butterfly 01 fluttering öffnen (eventuell befinden sich jetzt zwei Dateien mit demselben Namen in Flash; verwechseln Sie sie nicht).
  6. In Adobe Flash: In der Bibliothek der Musterlösung Butterfly01Flash.fla bzw. Butterfly01Flash11.fla: Alle Ordner und Symbole markieren → Strg-C (Strg-C).
  7. In Adobe Flash: In der Bibliothek der von Flex erstellten fla-Datei Butterfly01Flash.fla, die kopierten Symbole und Ordner einfügen: Strg-V (Strg-V).
  8. In Adobe Flash: In der Bibliothek der von Flex erstellten Butterfly01Flash.fla: Symbol Butterfly selektieren.
  9. In Adobe Flash: In der Menüleiste der von Flex erstellten Butterfly01Flash.fla: BefehleSymbol in Flex-Komponente konvertieren ⇒ Das Icon von Butterfly ändert sich: Fx auf schwarzem Grund.
  10. In Adobe Flash, die von Flex erstellte Datei Butterfly01Flash.fla: DateiSpeichern.
  11. In Adobe Flash, links oben auf der Bühne: Klick auf Button Fertig ⇒ Im Flex-Ordner assets wird die Datei Butterfly01Flash.swc erstellt; diese wird automatisch in den Ordner lib kopiert.
  12. Im Flash Builder, Editorfenster (Design-Modus) der Datei Butterfly01Flex.mxml: Sofern die Komponente Flash Professional-Komponente noch vorhanden ist: Diese entfernen.
  13. Im Flash Builder, Editorfenster: Sofern sich die Komponente Butterfly noch nicht auf der Bühne befindet: Diese (aus Fenster Komponenten → Benutzerdefiniert) auf die Bühne ziehen
  14. Im Flash Builder, Editorfenster: Die Komponente Butterfly evtl. positionieren und skalieren.

Tipp: Sollte es beim Start einer Flex-Anwendung zu unerklärlichen Fehlern kommen, hilft oft:

  • In der Menüleiste (ganz oben): ProjektBereinigen....

Schmetterlingssymbol aus Flash CS3, Flash CS4 oder Flash CS5 (Alternative zu oben) in Flex integrieren

Voraussetzung: Ein neues Flex-Projekt wurde gemäß der Anleitung von Abschnitt Ein neues Flex-Projekt erstellt.

Die folgende Beschreibung funktioniert sowohl für Flash CS4, als auch für Flash CS5 und sollte auch für Flash CS3 funktionieren.

  1. Im Flash Builder, Paket-Explorer: Klick mit rechter Maustaste auf den Projektordner Butterfly01FlexNeuOrdner → Ordnername: assets (Schreibweise ist bei Flash CS5 wichtig) → Fertig stellen.
  2. Im Flash Builder, Paket-Explorer: Klick mit rechter Maustaste auf den Ordner assetsImportierenAllgemein (Ordner durch Klick Dreiecksicon öffnen) → DateisystemWeiterAus Verzeichnis: hier den Ordner mit Ihrer Lösung oder der Lösung von AS3-Tutorium: Flash: Butterfly 01 fluttering wählen → Häckchen vor fla-Datei mit Flash-Musterlösung (Butterfly01Flash.fla) → Fertig stellen.
  3. Im Flash Builder, Paket-Explorer: Die fla-Datei im Ordner assets durch Doppelklick in dobe Flash öffnen.
  4. In der Bibliothek von Adobe Flash: Symbol Butterfly selektieren.
  5. In Adobe Flash: BefehleSymbol in Flex-Komponente konvertieren (in Flash CS4 gibt es diesen Befehl nur, wenn das Plugin Flex Component Kit installiert wurde; siehe Übersicht) ⇒ Das Icon von Butterfly ändert sich: Fx auf schwarzem Grund..
  6. In Adobe Flash: DateiSpeichern.
  7. In Adobe Flash: DateiVeröffentlichen.
  8. Im Flash Builder, Paket-Explorer: Klick mit rechter Maustaste auf den Projektordner Butterfly01FlexAktualisieren.
  9. Im Flash Builder, Paket-Explorer: Neu erstellte swc-Datei (Butterfly01Flash.swc) vom Ordner assets in den Ordner lib verschieben.
  10. Im Flash Builder, Editorfenster (Design-Modus) der Datei Butterfly01Flex.mxml: Komponente Butterfly (aus Fenster Komponenten → Benutzerdefiniert) auf die Bühne ziehen .
  11. Im Flash Builder, Editorfenster: Die Komponente Butterfly evtl. positionieren und skalieren.

Tipp: Sollte es beim Start einer Flex-Anwendung zu unerklärlichen Fehlern kommen, hilft oft:

  • In der Menüleiste (ganz oben): ProjektBereinigen....

Probleme und Lösungen

Problem: Es wird keine swc-Datei erstellt, obwohl im Flash-Menü Veröffentlichen ausgeführt oder der Button Fertig geklickt wurde.

Lösung: DateiEinstellungen für Veröffentlichungen... → Reiter Flash → Häckchen vor SWC exportierenOK

Anwendung testen

  1. Auf Icon Ausführen Als... (fünftes Icon links oben: weißes Dreieck in grünem Kreis) klicken → WebanwendungOK.
  2. Wenn die Datei Butterfly01Flex.mxml nicht per Strg-S (Ctrl-S) oder DateiSpeichern gesichert wurde, erscheint nun der Dialog Speichern und starten in dem die zu speichernden Dateien selektiert sind. Hier ist es sinnvoll die Option Ressourcen vor den Start immer speichern zu selektieren (damit dieser Dialog künftig nicht mehr angezeigt wird) und anschließend OK zu klicken.
  3. Im Standard-Browser öffnet sich die Flash-Anwendung.

Im Allgemeinen ist es nicht notwendig, die Anwendung immer im Browser zu starten. Der Standalone-Flash-Player ist für Testzwecke i.Allg. vollkommen ausreichend. Ob die Debug-Version im Browser oder im Standalone-Flash-Player gestartet wird, kann man in den Projekteigenschaften festlegen.

  • Im Paket-Explorer: Klick mit rechter Maustaste auf dem Projektordner Butterfly01FlexEigenschaftenFlex CompilerHTML-Wrapper-Datei generieren → kein Häckchen (⇒ Anwendung wird im Standalone-Flash-Player gestartet; Häckchen ⇒ Anwendung wird im Browser gestartet) → OKOK.

Man kann die Anwendung auch im Debug-Modus starten (viertes Icon links oben: ein symbolisierter Käfer (= Bug)). In diesem Fall werden Fehlermeldung und trace-Ausgaben (trace("Text, der nur im Debug-Modus angezeigt wird")) im Fenster Konsole (unterhalb des Editor-Fensters in der Srandardansicht) ausgegeben.

Für den Debuggingmodus sind allerdings besondere Flash-Player notwendig. Diese können unter http://www.adobe.com/support/flashplayer/downloads.html heruntergeladen werden, sofern der Flash Builder meldet, dass kein geeigneter Flash-Player gefunden werden kann.

Erweiterung: Kreis-Animation mit ActionScript

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

Musterlösung (Flex 4/Flash CS4) (SVN-Repository)


Im Gegensatz zu Flash bietet der Flash Builder keine Möglichkeit Timeline-Animationen grafisch zu erstellen. Mann kann allerdings Animationen mit Hilfe von ActionScript programmieren. (Es gibt sogar die Möglichkeit, in Flash eine Animation als ActionScript-Code zu exportieren und diese dann in Flex einzusetzen.)

Wenn der folgende Code in die Datei Butterfly01Flex.mxml (im Quellenmodus) eingefügt wird, fliegt der Schmetterling auf einer Kreisbahn und wirft dabei sogar einen Schatten.

Tipp: Eventuell ist besser, zunächst den zweiten Teil des Flex-Tuitoriums zu bearbeiten, bevor Sie sich diese erweiterte Musterlösung des ersten Teil näher ansehen. Der MXML-Code des zweiten Teils ist deutlich einfacher.

<?xml version="1.0" encoding="utf-8"?>
<s:Application
  xmlns:fx="http://ns.adobe.com/mxml/2009" 
  xmlns:s="library://ns.adobe.com/flex/spark" 
  xmlns:mx="library://ns.adobe.com/flex/mx"
  xmlns:std="*"
  width="550" height="400"
  applicationComplete="o_init()"
>
  <fx:Style source="css/main.css"/>

  <s:Label 
    x="110" y="5"
    text="Butterfly 01 Circle (Flex 4/Flash CS4)"
  />
  <std:Butterfly
    id="sp_butterfly_movie"
    x="275" y="50" rotation="90"
    width="125.55" height="93.8" 
  />

  <fx:Script>
    <![CDATA[
      import flash.filters.DropShadowFilter;
      
      private const c_x0:      Number = 275;
      private const c_y0:      Number = 200;
      private const c_r:       Number = 150;
      private const c_delta:   Number = 1.0/64;
      
      private const c_filters: Array = [new DropShadowFilter(30,45,0,0.8)];
      
      private var v_phi: Number = 0;
      
      private function o_init(): void
      {
        // Scale the stage, when the output Window is scaled.
        this.stage.scaleMode=StageScaleMode.SHOW_ALL; 
        
        // Add a shadow to the butterfly!
        sp_butterfly_movie.filters = c_filters;

        this.addEventListener(Event.ENTER_FRAME, o_move_butterfly);  
      }
      
      private function o_move_butterfly(p_event: Event): void
      {
        sp_butterfly_movie.x = c_x0 + Math.sin(v_phi)*c_r;
        sp_butterfly_movie.y = c_y0 - Math.cos(v_phi)*c_r;
        
        if (v_phi >= 2*Math.PI)
          v_phi = Math.PI*c_delta; 
        else
          v_phi += Math.PI*c_delta;
        
        sp_butterfly_movie.rotation = v_phi*180/Math.PI+90;
      }
    ]]>
  </fx:Script>
</s:Application>

Anmerkungen

Die Hauptbühne wird in einem Flex-Web-Projekt mit Hilfe der Spark-Komponente Application definiert. In einem Flex-Air-Projekt müsste die Komponente WindowedApplication verwendet werden.

Im öffnenden Tag dieser Komponente werden vier Namespaces definiert:

  • s: Der Namespace für die moderneren Spark-Komponenten (existieren seit Flex 4; setzen mindestens eine Flash Player der Version 10 voraus)
  • mx: Der Namespace für die alten MX-Komponenten (existieren seit Flex 2; sollten nur noch verwendet werden, wenn es keine Spark-Komponenten als Ersatz gibt)
  • fx: Der Namespace für alle nicht-grafischen Flex-Elemente, wie z.B. AS3-Scripts, CSS-Style-Anweisungen etc.
  • std: Der Namespace für das Standard-Package. (Im Flash-Builder wird dafür automatisch das Kürzel ns1 vergeben, wenn das Kürzel std nicht zuvor definiert wurde.)

Die Komponente Butterfly liegt im Standard-Package, da in Flash unter EigenschaftenKlasse kein anderes Package angegeben wurde. Bei der Label-Komponente handelt es sich dagegen um eine Spark-Kompnente; ihr wird daher der Namespace s zugewiesen.

Um von ActionScript aus auf das Schmetterlingsobjekt zugreifen zu können, wird ihm der Identifikator sp_butterfly_movie zugeweisen. Das Attribut id im öffnenden Tag einer MXML-Komponente entspricht dem Attribut name („Instanzname“), das einem Objekt auf der Bühne in Flash zugewiesen werden kann.

Sobald die Flex-Anwendung vollständig gestartet wurde und insbesondere auch die Hauptbühne stage erstellt wurde, signalisiert die Komponente Application bzw. WindowedApplication dies mit dem Ereignis ApplicationComplete. (Im Gegensatz dazu wird CreationComplete bereits signalisiert, wenn die Hauptbühne stage noch nicht initialisiert, d.h. gleich null ist.)

Im obigen Beispiel wird veranlasst, dass die Observer-Methode o_init aufgerufen wird, sobald das Ereignis ApplicationComplete eintritt. Die Methode o_init sorgt zunächst dafür, dass sich die Größe der Bühne an die Größe des Ausgabefensters anpasst. (Dafür ist es notwendig, dass stage bereits initialisiert wurde.)

Da es sich bei ButterflyMovie um ein Objekt der Klasse MovieClip handelt, kann man dem Schmetterling ein Array mit Filtern zuweisen, wie zum Beispiel einen Filter, der einen Schattenwurf simuliert (new DropShadowFilter(30,45,0,0.8)).

Zu guter Letzt wird in der Methode o_init festgesetzt, dass bei jedem ENTER_FRAME-Event (also jede vierundzwanstigstel Sekunde, wenn Framerate 24 Bilder pro Sekunde betraägt) die Observer-Methode o_move_butterfly aufgerufen wird. Diese Methode berechnet jeweils die neue Position des Schmetterlings (auf einer Kreisbahn) und dreht den Schmetterling (sp_butterfly_movie.rotation) in Flugrichtung.

Quellen

SVN-Repository-Verweise


Dieser Artikel ist GlossarWiki-konform.