AS 3.0 Workflow-Special - Integration von Assets Teil 2
Zwar klappte der erste Weg bei zwei ActionScript 3.0 Projekten recht gut, aber auf Dauer muss auch gewährleistet sein, dass Designer Animationen auf der Zeitleiste anlegen können und man diese von außen steuern kann.
Nach einigen Recherchen sieht mein aktueller Workflow wie folgt aus:
1. Man hat eine FLA-Datei (Asset.fla), die als Asset-Bibliothek dient. Als Beispiel legt man in der Bibliothek einen MovieClip an und definiert als Linkage-Class “MovieClipExample”. In den Publish Settings aktiviert man “Export SWC” und kompiliert die Asset-Bibliothek.

2. Nun folgt im Flash Explorer von FDT ein Rechts-Klick auf das Projekt. Hier wählt man NEW | LINKED LIBRARIES aus. In der Folge definiert man eine Pfad-Variable und selektiert die exportierte SWC-Datei.
3. FDT bietet jetzt die Möglichkeit SWC zu durchsuchen und somit kann man im Ordner Linked SWCs, die verknüpfte SWC aufklappen und sieht als Inhalt eine Klasse mit dem Namen MovieClipExample.

Zwischenfazit Teil 2:
Mit dieser Lösung hat man die Möglichkeit, schon einmal auf die Schnelle zu sehen, welche Assets sich in der SWF befinden und man kann zudem auf die Eigenschaften (z.B. alpha) und Methoden (z.B. gotoAndPlay) der Assets zugreifen.
Toll wäre jetzt noch, wenn man auf einem bestimmten Frame einer Animationen ActionScript-Code ausführen kann, der idealerweise nicht auf der Zeitleiste liegt, sondern in einer externen Klasse.
-> Hier geht es zum dritten und letzten Teil
13. November 2007
Abgelegt unter: Design, Flash, Publikationen, Technik Allgemein
11 Comments Add your own
1. sascha/hdrs | November 13th, 2007 at 6:32 pm
Nettes Tutorial! So mache ich es auch! Aber hier meine grosse Frage: was ist wenn Du die MovieClipExample Klasse in einem Package haben willst, z.B. components.MovieClipExample? Sobald ich sowas starte bekomme ich Null Reference Exceptions! Ich bin schon seit langem auf der Suche nach einer Loesung zu diesem Problem, vieleicht weisst Du ja was.
2. Administrator | November 13th, 2007 at 11:10 pm
Hej Sascha,
das Problem hatte ich noch nie. Ich finde es eigentlich gut, dass MovieClipExample physikalisch nicht existiert.
Ich hab es aber gerade einmal getestet und bekomme, sobald ich die Klasse in einem Package packen will, folgenden Fehler:
VerifyError: Error #1014: Class MovieClipExample could not be found.
at global$init()
Ich denke mal, Du bekommst auch diesen Fehler, oder?
Ad hoc habe ich da keine Lösung. Ich habe auf diese Art bis dato maximal 20-30 Assets pro Projekt eingebunden und da fand ich das nicht so schlimm, wenn diese Klassen alle auf oberster Ebene lagen. Ich nutzte als Kennung dann aber immer einen Namen mit *Asset.
Wofür willst Du die ?Peusdo-Klassen? in einem Package haben? Wenn Du Sie mit Logik bestücken willst, dann kannst Du das ja über die Base-Class machen.
Aber ich denk mal über das Problem nach und melde mich, sobald ich etwas habe.
Viele Grüße nach Tokyo!
3. sascha/hdrs | November 14th, 2007 at 6:17 am
Hi Jens,
genau die Base-Klassen meinte ich ja. Ich habe mal ein Beispiel Projekt angelegt. Du kannst es hier downloaden: http://files.hexagonstar.com/test/swctest.zip
Darin ist ein Flexbuilder Projekt das in etwa meinem Setup entspricht. In dem ‘lib’ folder sind zwei weitere folder ‘fla’ und ’swc’. Wenn Du das Fla file in Flash oeffnest siehst Du ein Asset namens TestComponent. Dies benutzt als Base-Class ‘components.TestComponent’ und wenn Du im src-folder schaust findest Du die Klasse TestComponent im Package namens ‘components’.
Wenn Du dies mit mxmlc kompilierst und startest wirst Du eine Exception bekommen:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at components::TestComponent()[D:\Eclipse\swctest\src\components\TestComponent.as:12]
at Main()[D:\Eclipse\swctest\src\Main.as:10]
… offensichtlich ist das TextField in der TestComponent null. Wenn Du die Base-Klasse im top-package hast laueft alles wunderbar. Aber Du musst zugeben das es nicht optimal ist wenn viele dieser Klassen im top-package liegen (oder gar in einem anderen folder z.B. dem fla-Folder).
4. sascha/hdrs | November 14th, 2007 at 7:16 am
Moment… mir ist gerade total ein Licht aufgegangen … Ich habe bisher das Class Field im Linkage Properties Dialog fuer die base class benutzt dabei sollte man ja das Base Class benutzen und die Class ist dann in der Tat nur virtuell. So gehts natuerlich. Grmpf! Da muss man erstmal durchblicken!
5. peyman | November 14th, 2007 at 10:19 am
Super Sache das Ganze.
Ich habe nur noch folgendes Problem:
Wenn ich kompiliere und der FlashDebug Player das SWF öffnet, bekomme ich folgenden einen ErrorDialog.
http://www.peyman.de/error.jpg
Wenn ich die SWF außerhalb von Eclipse starte passiert das Selbe.
Mit dem external SWF Palyer von FDT passiert das nicht.
Was kann ich da machen?
6. Administrator | November 14th, 2007 at 10:35 am
Hej Peyman,
das ist total okay so.
Zur Erklärung:
Debuginformationen kannst Du nur erhalten, wenn Du mit Debug-As kompilierst und die SWF dann mit dem Debugplayer öffnest. Das Dialogfenster fragt halt, womit sich der Player verbinden soll, um die Informationen weiter zu geben. Der External SWF Player von FDT gibt die Informationen z.B. an die Konsole von Eclipse weiter.
Mit Run-As kompilierst Du, wenn Du die SWF distribuieren willst.
7. peyman | November 14th, 2007 at 11:11 am
Verstehe. Vielen Dank für die Aufklärung Jens.
8. sascha/hdrs | November 14th, 2007 at 12:07 pm
oder er kann mxmlc -debug=false benutzen, dann gibts als Resultat keine Debugger-Version des SWFs.
9. Blog von Jens Franke &raq&hellip | November 26th, 2007 at 5:09 pm
[…] amp; Flex SDK- Flex Compiler Shell- AS 3.0 Buchtipps- Integration von Assets - EMBED-Tags- […]
10. Michel | December 20th, 2007 at 11:22 pm
Hi Jens,
danke erst mal für das super interessante und hilfreiche Tutorial. Hat mir den Einstieg sehr erleichtert.
Ich wollte an dieser Stelle nur noch anfügen, dass das Browsen der “importierten” SWCs scheinbar nur mit der Professional Version von FDT funktioniert. Ich als Basic User habe da leider pech gehabt…
11. Chris | January 11th, 2008 at 2:39 pm
Hallo,
hat jemand eine Lösung für die Verwendung von Streaming Sound in swc’s gefunden? Wenn man in Flash einen MovieClip mit gestreamten Sound auf der Zeitleiste anlegt und den per Builder oder FDT einbindet, wird der Clip einfach ignoriert.
Leave a Comment
Some HTML allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
Trackback this post | Subscribe to the comments via RSS Feed