Streamen von SWFs

Grundsätzlich können SWFs streamen. Viele Preloader basieren darauf: Auf dem ersten Frame (der bereits verfügbar ist) dreht sich die Sanduhr, während der zweite Frame mit der Anwendung noch geladen wird.

So kann man zB mit LoaderMax ein SWF streamen, in dem ein Video und ein Sound auf der Zeitleiste liegen:

Leider kann man das Laden nicht pausieren:

It’s actually impossible to do a true pause/resume on a single loader in Flash. When you pause() an individual loader, it basically cancels it and then when you resume(), it starts over. You might be wondering why have pause/resume then at all, right? It’s primarily useful in a LoaderMax queue. Imagine you have 20 loaders in a LoaderMax queue and after 12 of them, you pause() while the 13th one is loading. It would technically just cancel that 13th one, but when you resume(), the 12 that had already loaded are still there – it resumes the queue at 13 and picks up from there.

Quelle

Trotzdem nice: Streaming, und trotzdem Zugriff auf einzelne Frames.

Wichtig dabei:

  • autoPlay:false. Das verhindert, dass das SWF “im Hintergrund” schon startet, während man es eigentlich noch buffert
  • die Zeilen mit “SoundTransform”. “autoPlay:false” setzt das Volume des SWF auf 0, damit man es im Hintergrund nicht hört. Das wird zwar automatisch wieder auf 1 gesetzt, aber erst, wenn das SWF fertig geladen ist!
  • Der Sound muss auf der Hauptzeitleiste liegen! Wird er in einen MC verschachtelt, muss dieser parallel zu _loadedSWF.gotoAndPlay(1) ebenfalls auf Frame 1 zurückgesetzt werden

Effizienter Zugriff auf Singletons

Häufig sieht der Zugriff auf Singletons so aus:

Effizienter finde ich aber

Siehe Bild. getInstance() ist dabei “internal static”

PS: “internal” ist vielleicht nicht nötig, aber “protected” ging irgendwann mal nicht, deswegen… sicher ist sicher^^

Flash (Debug) Player lässt Firefox abstürzen

…und zwar in Version 3.6.x und 4.0, mindestens. Extrem nervig, das.

Nun hört man (Danke, Harald), dass man in der about:config folgende Zeilen

ändern soll zu

Ich ergänze: Wenn es die erste Zeile nicht gibt, dann kann man sie manuell hinzufügen, als Boolean mit “false”.

AS3/E4X: Rekursiv alle Unterknoten mit einem Attribut finden

Nerd-Porn:

Liefert das Attribut “myAttribute” des Unterknotens (nicht begrenzt auf direkte Kind-Knoten), dessen Attribut myID gleich “abc” ist. Man beachte: Den doppelten Punkt hinter “xml”, sowie den Sternchen-Selektor. Quelle, man beachte dort auch die unten verlinkten weiterführenden Artikel.

UPDATE: Eine Struktur wie die Folgende

kann man so durchsuchen:

text:

slide.text:

Flashplayer 11, Molehill, Flare3D 2.0 in FDT 4.2

Tag,

wer die Flare3D 2.0-Beispiele* in FDT 4.2 ausprobieren möchte, dem sei der folgende Artikel an’s Herz gelegt: How to get started with the Molehill API and Away3D. OK, ist nicht für Flare3D, aber trotzdem hilfreich. Besonders wichtig:

  • Als Compiler-Argument “-swf-version=13” hinzufügen, sonst gibt’s Runtime-Fehler
  • Das dort verlinkte SDK hat keine flex.swc in frameworks/libs, was mein FDT gar nicht mochte. Aber es funktioniert mit der swc aus dem 4.1er SDK^^ Einfach rüberkopieren
  • Die flashplayer_inc_playerglobal_022711.swc kann zwar auch in einem externen Verzeichnis eingebunden sein, für FDT muss diese nicht, wie beschrieben, die originale playerglobal ersetzen. Dann kompiliert er aber leider nicht 🙂 Fehlermeldung:

Inkonsistente Verknüpfung in /xy/abc/flashplayer_inc_playerglobal_022711.swc(flash.net.drm:AddToDeviceGroupSetting, flash.net.drm:AuthenticationMethod, flash.net.drm:LoadVoucherSetting). ‘flash.net.drm:LoadVoucherSetting’ ist als extern markiert, ‘flash.net.drm:AddToDeviceGroupSetting’ aber nicht.

bzw auf Englisch:

Inconsistant linkage in /xy/abc/flashplayer_inc_playerglobal_022711.swc(flas h.net.drm:AddToDeviceGroupSetting, flash.net.drm:AuthenticationMethod, flash.net.drm:LoadVoucherSetting) – ‘flash.net.drm:LoadVoucherSetting’ is marked as extern, but ‘flash.net.drm:AddToDeviceGroupSetting’ is not.

Also doch die vorhandene playerglobal in framework/libs/player/10.2/ ersetzen. Man liest vereinzelt auch davon, dass man einen neuen Ordner “11” in frameworks/libs/player anlegen kann, das habe ich aber nicht probiert.

HTH,

Lennart

*Warum kein Away3D? Ich habe keines der beiden Frameworks bisher ausprobiert, aber hier klang Flare3D irgendwie cooler 😉

Flash auf iOS, 2

7 Tage, 7 Posts, 6: Eine Kurzanleitung zum Open Screen Project Manager. Ich setze den vorherigen Post zum Thema voraus. Desweiteren wird benötigt:

Dann kann’s losgehen. Der Open Screen Manager ist eine AIR-Anwendung, die ein Projekt-Template für FDT installiert. Ein solches Projekt erzeugt ein Standard-Projekt, ergänzt um die folgenden Ordner:

  • bin: Das Export-Verzeichnis für alle Open Screen Formate
  • bin/ios: Das Export-Verzeichnis für iOS-Apps
  • bin/resources: Hier können externe Inhalte (Bilder, XMLs, …) abgelegt werden, die die Anwendung nachladen kann. ACHTUNG: SWFs dürfen keine Logik enthalten 🙁
  • build: Einstellungen und Ant-Skripte
  • build/core: Enthält zentrale Skripte plus einiger Pfadangaben. Kann im Einzelfall geändert werden, muss aber normalerweise nicht.
  • build/device: Enthält Settings für jedes unterstütze Gerät. Muss normalerweise nicht geändert werden
  • build/*.properties: Wichtige Settings, die manuell geändert werden können, aber normalerweise durch einen Dialog geändert werden:
  • build/project.osp: Per Doppelklick zu öffnender Dialog zum Setzen der wichtigsten Einstellungen

Diese Einstellungen sind die folgenden:

  • Project-Settings, Name: Dieser Name wird später auch am Icon der Anwendung auf dem iPad-Desktop stehen.
  • Project-Settings, Identifier for Distribution: Zum Beispiel com.example.myApp
  • Project-Settings, File name: Das SWF
  • Project-Settings, SWF Content: Der Name des SWF ohne Suffix (?)
  • Project-Settings, Main class: Die zu startende Klasse in dem SWF
  • Device-Settings: Hier ist die iOS-Plattform auszuwählen, also iPad, iPhone, …
  • Plattform-Settings, iOS certificate file: Das Zertifikat des Entwicklers – wichtig: als .p12-Datei
  • Plattform-Settings, iOS certificate password: Das Passwort, mit dem die .p12-Datei verschlüsselt wurde
  • Plattform-Settings, iOS Provision file: Das Provisioning-File
  • Plattform-Settings, iOS Adobe Packager (pfi): etwa ../../packagerforiphone/bin/pfi, aus dem erwähnten Paket

Kompiliert wird über Ant (/build/build.xml). Achtung: Das Skript wird basierend auf dem oben ausgewählten Device erstellt. Wenn dort nichts eingetragen ist, ist das Skript leer. Falls der Task fehlerfrei durchläuft, sollte unter bin/ios/ipad/ eine .ipa-Datei mit dem unter Project-Settings/SWF Content eingetragenen Namen erscheinen. Diese kann man dann via iTunes installieren 🙂

Flash auf iOS, 1

7 Tage, 7 Posts, 5: Eine Kurzanleitung zum Open Screen Project Manager. Hier der vorbereitende Teil:

  1. Man besorge sich einen iOS-Developer Account.
  2. Man logge sich ein.
  3. Man gehe zum iOS Provisioning Portal (rechts in der Navi)
  4. Man gehe zu “Devices”, und richte (zum Beispiel) sein iPad ein. PS: Die UDID (“Device ID”) findet man, wenn man in iTunes auf der Übersicht der Geräteeigenschaften auf die Seriennummer klickt. Diese wird dann zur UDID^^
  5. Man gehe zu “App IDs” und trage die folgenden Informationen ein: Description (Fließtext), “Bundle Seed ID” (die App-ID, unter der man mehrere Apps bündeln möchte – optional), “Bundle Identifier” (zum Beispiel com.example.myApp)
  6. Man gehe zu “Certificates” und lege einen neuen “Team Member Account” an (man beachte dabei das “Howto”, ganz rechts). Das ist wichtig, der aktuelle Account dient nur zu administrativen Zwecken. Auch wichtig: Erst nach der Verifizierung per Email erscheint der neue Account unter “Team Member Certificates”
  7. Man gehe zu Provisioning und verknüpfe App-ID(s), Entwickler und Device(s)
  8. Man lade sich das resultierende Provisioning-Profile runter