Fonts auslagern. [UPDATE]

Es macht Sinn, verwendete Schriftarten in eine Flashanwendung einzubinden – so sind sie unabhängig vom Zielsystem verfügbar, und nicht zuletzt kann man erst dann (Alpha-)Tweens auf sie anwenden. Andererseits machen sie die Flashanwendung zum Teil sehr groß. Die Lösung? Die Schriftarten erstmal in eine separate SWF auslagern:

Zu beachten: Die Klasse muss Sprite extenden; der FontName sollte ein anderer sein als der Fontname im System (um diesen nicht zu überdecken); Schriftschnitte wie bold oder italic müssen explizit eingebunden werden. Der Übersichtlichkeit halber benenne ich die Fonts (FontName) genauso wie die Klasse, in die sie embedded werden (hier: “Foo”)

Diese Klasse wird nun kompiliert, und die SWF unter einem Pfad, zB “fonts.swf” abgelegt. Unter diesem Pfad kann sie nun, etwa im Rahmen einer Preloader-Queue mit weiteren Assets, dynamisch von der eigentlichen SWF nachgeladen werden:

Zu beachten hierbei: Es muss der komplette Package-Pfad (“x.y.z.Fonts”) an ApplicationDomain.getDefinition() übergeben werden! Nur der Klassenname genügt nicht.

Außerdem: Wann immer man den Text des entsprechenden TextField (neu) gesetzt hat, muss das TextFormat mit dem eingebundenen Font (neu) zugewiesen werden. Die Property embedFonts setzt man auf true:

hth.

3 thoughts on “Fonts auslagern. [UPDATE]

  1. Soweit ich den verstanden habe, muss ich die Fonts aber auch erstmal geladen haben 🙂 hier würde er also die onComplete() ersetzen…

    das Ziel hier war, die Fonts im Rahmen *einer* Loading-Queue mit 20 anderen Assets verschiedensten Typs zusammen vorzuladen; hier habe ich nur den Font-Teil der Preloader-Logik gepostet. Was man nun machen kann, ist den Loader auszulagern, und ein eigenes PreloaderItem zu schreiben, das auch einen Callback (quasi ein spezifisches onComplete()) enthält. Nun kannst Du Grafiken laden, die über den enstprechenden Callback verarbeiten; und die Fonts-SWF über einen anderen Callback an die Font.registerFont übergeben. Trotzdem behälst Du *eine* Queue, und damit auch *eine* Fortschrittsanzeige. Hm, hat das eigentlich noch was mit Deinem Comment zu tun? Ich glaube nicht 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *

Ich erkläre mich damit einverstanden, dass alle eingegebenen Daten und meine IP-Adresse zum Zweck der Spamvermeidung durch das Programm Akismet in den USA überprüft und gespeichert werden. Weitere Informationen zu Akismet und Widerrufsmöglichkeiten.