|
Inhaltsverzeichnis
Der Font Manager ist für die Organisation von "Shared Library" Schriften gedacht und eröffnet ganz neue Möglichkeiten. Mit dem SFM müssen Sie Fonts nicht mehr in die Filme einbetten, sondern können sie ganz bequem in jeden Movie Clip hineinladen. Externe Bibliotheken müssen als .swf Paare existieren. Erstens die Bibliothek und zweitens das Container File. Der Name der Bibliotheken-Datei ist mit dem Container Filenamen verbunden.
Beispiel:
[container_file_name]+[_lib]+[.swf]
Wenn also der Container heisst, dann muss die Bibliothek heissen.
Die Bibliothek muss einen Film beinhalten, der folgende Linkage-Einstellungen hat: "export for runtime sharing " Parameter muss aktiviert sein und der "URL" Pfad muss eingegeben sein. Im Movie-Clip sollte sich ein Textfeld befinden, welches die Schrift einbettet.
Schauen Sie bei Bibliotheken kreieren und den Beispiel-Dateien nach um mehr zu erfahren.
Nach dieser Prozedur können die produzierten Schrift-Clips geladen und mit den SFM Methoden registriert werden.
Der oben beschriebene Gebrauch ist nicht der einzige mögliche. Der Font Manager ist nur das Verbindungselement zwischen einer "shared Library" und einem anderen Movie-Clip eines Projektes.
Zugang zu einer Schrift kann wie folgt gemacht werden:
- Der Haupt-Movie kann ein externes File laden und so seine shared Library brauchen;
- Ein geladener Film kann von einem anderen geladenen Film die Schrift brauchen;
- Der Haupt-Film kann seine eigene Shared Library haben, und diese kann in den extern hineingeladenen Movies gebraucht werden;
Standartmässig wird ein Objekt bei der Initialisierung gemacht: fonts_mng. Dies ist ein globales Objekt und wird versteckt durch den Gebrauch von ASSetPropFlags.
Wenn Sie die Inhalte der fonts_mng Objektes sehen möchten, dann machen Sie einfach eine Referenz davon:
_root.show_me = font_mng
So können Sie die Variablen im "Film testen" Modus anschauen.
Der Font Manager gibt Ihnen folgende neue Möglichkeiten:
- Das brauchen von gleichen Bibliotheken Dateien für eine ganze Seite lässt Sie die Grösse der zu ladenden Daten minimieren.
Einmal geladene Dateien werden über den Browser Cache erreicht.
- Schriften können geladen werden, wenn sie gebraucht werden.
Während des HTML Aufbaus der Seite ist es m öglich die Schriften zu definieren die gebraucht werden und sie dann zu laden.
- Einfacherer Sprachsupport.
Oftmals muss viel verändert und angepasst werden um verschiedene Internationalitäten abzudecken. Mit dem Font Manager ist es möglich die benötigte Schrift hineinzuladen und an die Textfelder weiterzugeben.
- Der Redesign Faktor.
Es reicht nun aus einfach die Schrift in der der Biblithek auszuwechseln und schon wird diese im ganzen Projekt erscheinen..
- Trennen von Daten und Bibliotheken.
Es ist nun möglich eine richtige Trennung hinzukriegen und nur die Elemente zu laden welche auch wirklich gebraucht werden.
Es ist Möglich eine Font Bibliothek mit Hilfe der Font Library Creator Extension vonCarlos Rovira zu machen.
Notiz: Der FontManager ist primär für den Gebrauch mit dem Flash Player 6 gemacht worden. Alle Beispiele und Tutorials sind in erster Line für den Player 6 zu publizieren.
Wie auch immer, es ist natürlich möglich den SFM im Player 7 zu benutzen.
Wie benutze ich den FontManager für die Version 7
Schritt 1: Bibliotheken-Film kreieren und Schrift einfügen
- Kreieren Sie ein neues .fla und benamsen Sie es mit Namen und Attribut der Schrift. Der Dateiname sollte folgende Teile beinhalten:
zum Beispiel: ,
Hier bedeutet die Schrift für den generellen Gebrauch. Das heisst die Schrift ist als italic eingebunden.
Wenn Sie eine Bibliothek mit der gleichen Schrift aber einem anderen Schnitt definieren möchten, dann ersetzten Sie einfach das i durch zum Beispiel durch ein p für "plain". Dies könnte dann so aussehen:
body_p_lib.fla für die Schrift in normal
body_b_lib.fla für die Schrift in fett
body_bi_lib.fla für die Schrift in fett/italic
Brauchen Sie keine Schrift Namen für eingebetteten Schriften. Für den Fall, das die Schrift ausgewechselt wird, müssten Sie an verschiedenen Orten Ihr Skript ändern oder ein anderer könnte durch eine solche Praxis verwirrt werden.
- Machen Sie einen neuen Film und geben Sie ihm einen Namen. Es wird empfohlen den gleichen Namen wie der, der Bibliothek zu benutzten. Zum Beispiel: . Selektieren Sie Linkage... und aktivieren Sie die Export for runtime sharing Eigenschaft. Alle anderen Eigenschaften sind nicht wichtig.
Setzten Sie nun den URL Pfad zum .swf File. Der Name sollte dann zum Beispiel sein.
- Machen Sie ein neues Textfeld innerhalb dieses Clips;
- Geben Sie Text in das Textfeld. Es wird empfohlen den Namen der Bibliothek, Schrift Schnitt und Sprachversion in dieses Textfeld zu schreiben. Zum Beispiel: ;
- Geben Sie auch die benötigten Eigenschaften ein ;
- Sie müssen die Schrift einbetten: Eigenschaften, Zeichen..., Alle Zeichen (oder ein Set von Zeichen);
- Geben Sie dem Textfeld einen Instanznamen (ist nötig), zum Beispiel: ;
Es ist möglich verschiedene Textfelder und somit Schriften in den selben Movie einzubetten. Dies wird nicht empfohlen und wenn die zwei oder mehreren Schriften nicht immer gleichzeitig benötigt werden macht dies auch keinen Sinn und kann Probleme verursachen.
- Im Film kreieren Sie nun eine Ebene oberhalb der des Textfeldes und platzieren folgendes Skript dort:
if (font_mng.registerTextFormat("body_i", this.body_i_txt)) {
this._parent.removeMovieClip();
}
- Speichern dieses fla mit dem gleichen Namen und kompilieren Sie es.
Schritt 2: Den Container Film kreieren
- Machen Sie ein neues fla;
- Speichern Sie es im gleichen Ordner und dem selben Namen aber ohne den _lib Zusatz, zum Beispiel:
- Mit Flash MX: Schliessen Sie das File und öffnen Sie das fla mit dem Textfeld als Bibliothek;
- Ziehen Sie nun den Movieclip mit dem Textfeld von der shared library auf die Bühne des neuen Filmes;
- Publizieren Sie den Film.
Die Bibliothek ist nun fertig für den Gebrauch.
Schritt 3: Loading and testing the shared libraries
- Machen Sie ein neues fla und speichern Sie es im gleichen Ordner. Zum Beispiel mit als name;
- Platzieren Sie das FontManager Initialisierungs-Skript auf einem Frame. Es wird empfohlen es auf dem ersten Frame einzusetzen;
Jetzt können Sie die Schrift laden und jedem gewünschten Textfeld zuweisen.
Für einen Test können Sie folgendes Skript auf dem ersten Frame nach dem SFM Initialisierungs-Skript auf _root platzieren:
_root.createEmptyMovieClip("temp_mc", 0).loadMovie("body_i.swf");
_root.createTextField("test_txt", 1, 0, 0, 200, 200);
_root.test_txt.text = new Array(30).join("Hello world! ");
font_mng.addListener(_root.test_txt);
_root.test_txt.onRegister = function(success, name, mng) {
if (!success) {
return trace("registerError : "+name);
}
trace("name:\n\t"+name+"\nfont:\n\t"+mng[name].font);
this.setTextFormat(mng[name]);
this.wordWrap = this.embedFonts=true;
};
- Wenn Sie dies jetzt testen, sehen Sie den Text im gewünschten Textfeld.
Schritt 4: testen und benutzen
Planen Sie den Standort Ihrer Bibliothek gut. Am besten Sie brauchen absolute oder Seitenrelative Pfade.
Notiz: Wenn Sie mit der Demo-Version des FontManager testen möchten können Sie dies nur mit einem WebSpeed Simulator tun.
Zuerst machen Sie also einen neuen Ordner wo die Bibliotheken abgespeichert werden sollen. In den Beispielen wird folgender Pfad benutzt: .
- Kreieren Sie also diesen Pfad auf der untersten Ebene Ihres Projektes.
- Öffnen Sie nun die body_i.fla Datei
- Öffnen Sie die Bibliothek und setzten Sie den URL Parameter in den Linkage Eigenschaften auf:
- Kompilieren Sie die Datei;
Sie werden folgende Fehlermeldung erhalten:
Error opening URL "file:///Libs/SharedFonts/body_i_lib.swf"
igniorieren Sie diese Nachricht;
- Kopieren Sie nun die body_i_lib.swf und body_i.swf Dateien in den SharedFonts Ordner (Sie müssen in diesen Files keine weiteren Änderungen machen);
- Öffnen Sie jetzt das TestBodyItalic.fla und ersetzen Sie
.loadMovie("body_i.swf")
mit
.loadMovie("/Libs/SharedFonts/body_i.swf")
- Publizieren Sie die Datai (Ctrl+F12) um eine HTML-Datei zu erhalten.
- Sie können diese Seite an einen beliebigen Ort innerhalb des Projektes kopieren.
- und wenn Sie diese Seite öffnen, werden Sie sehen dass, nachdem die Schriften geladen worden sind, das Textfeld in der gewollten Schrift formatiert sein wird.
Schritt 5: Gebrauch im Flash Player 7
Schritte:
- machen Sie ein 6 Player . swf File 65, welches das FontManager Initialisierung-Skript beinhaltet;
- platzieren Sie dieses File im Projekt und laden Sie es wenn nötig; oder
- platzieren Sie das FontManager Initialisierung-Skript in einem shared movieclip und platzieren Sie diesen in den Clip
Es gibt einen kleinen Nachteil beim Gebrauch mit dem 7er Player: es ist nötig zu warten bis das File geladen wurde, da dieses nur (ca 1KB) gross ist sollte dies aber kein Problem darstellen. Dieser Gebrauch ist auch mit dem 6er Player empfohlen. Es gibt keine funktionellen Unterschiede.
Ich habe während der Entwicklung des SFM viele Experimente gemacht. Die erste Version war eine Komponente. Während diesen Experimenten haben sich die Funktionen von 8 zu einer minimiert, bei den Events gings von 4 zu einer. Es waren auch mal 2 Eigenschaften vorhanden, welche ich auch erfolgreich eliminierte. Es wurden für das Testen rund 50 Dateien gemacht und basierend auf diesen kann ich nun einige Empfehlungen geben, welche ich euch nahelege zu gebrauchen:
Am besten ist es das FontManager Initialisierungs-Skript nicht zu includen. Es wird empfohlen ein .swf zu machen, welches das Skript enthällt und dann dieses in das Projekt hineinzuladen. Noch besser sogar ist es, einen "shared movieclip" mit dem FontManager Initialisierungs-Skript zu machen und diesen dann im Projekt dort einzusetzten wo nötig. Dies erlaubt es Ihnen bei einem Domainwechsel das Skript ohne Probleme zu wechseln.
Brauchen Sie keine Namen von den Bibliotheken Dateien in Ihren Filmen. Ihr System wird um einiges flexibler, wenn Sie ein XML File mit Beschreibung der Bibliothek machen. Zum Beispiel:
<fontlibrary version="1.0" author="Ivan Dembicki" >
<style name="body" font="Artemius TT" lang="rus" >
<plain id="body_p" url="/fontLibrary/rus/body_p.swf" />
<bold id="body_b" url="/fontLibrary/rus/body_b.swf" />
<italic id="body_i" url="/fontLibrary/rus/body_i.swf" />
<italicbold id="body_bi" url="/fontLibrary/rus/body_bi.swf" />
</style>
<style name="header" font="ArtemiusBlack TT" lang="rus" >
<plain id="header_p" url="/fontLibrary/rus/header_p.swf" />
<bold id="header_b" url="/fontLibrary/rus/header_b.swf" />
<italic id="header_i" url="/fontLibrary/rus/header_i.swf" />
<italicbold id="header_bi" url="/fontLibrary/rus/header_bi.swf" />
</style>
</fontlibrary>
Achten Sie auf den Zusammenhang von den ID-Attributen and Namen der Stile. Auf diesem Weg ist es einfach die URL des Bibliotheken Container-Files zu erhalten. Für eine Lokalisierung können Sie z.B. für Japan einen Folder "/fontLibrary/jp/" machen und diesen anzusprechen.
Auch die Umstellung von lokal auf Internet wird so wesentlich einfacher.
Brauchen Sie die Bibliotheken-Selbstregistrierung. Diese können Sie ja nach der Registrierung auch wieder löschen.
Brauchen Sie lokale Pfade für lokale Tests und im Internet sollten Sie mit absoluten Pfaden arbeiten.
Machen keine eigenen FontManager Instanzen, jedoch ist dies mit folgendem Code auch möglich:
my_font_mng = new font_mng.constructor()
Ich glaube es muss sein dies zu wissen, jedoch sollte diese Variante als letztes gebraucht werden.
Actions
Player-Version
Gebrauch
font_mng.registerTextFormat( instanceName, textField )
Parameter
instanceName - string, setzt den Namen des TextFormat Objektes
textField - pointer zum Textfeld, welches sich im shared movieclip befindet, (stellt das TextFormat Objekt) zur Verfügung.
returniert
Boolean. returniert false, wenn das Textfeld keinen eingebetteten Font beinhaltet oder wenn kein Instanz-Name des TextFormat Objektes vorhanden ist. Andernfalls wird true zurückgegeben.
Beschreibung
hode. Kreiert ein TextFormat Objekt im FontManager. Shared Movieclips können gelöscht werden wenn der Vorgang abgeschlossen ist.
Ein TextFormat Objekt im FontManager kann gemacht werden mit jedem Textfeld, welches sich in einem geteilten Film befindet und einen eingebetteten Font besitzt.
Direkt vor beendigung der Initialisation der Prozedur, sendet der FontManager broadcasts ein Event onRegister mit den initialisations Parametern
Beispiel
- wenn die Library geladen wurde, beim auffrufen aus dem shared movieclip (Selbstregistrierung):
if (font_mng.registerTextFormat("body_i", this.body_i_txt)) {
this._parent.removeMovieClip();
}
font_mng.registerTextFormat("body_i", this.body_i_txt)
- the case with the library placed on Scene:
font_mng.registerTextFormat("body_i", this.any_mc.shared_mc.body_i_txt)
Player-Version
Gebrauch
listenerObject.onRegister = function (success, name, instance_mng, textField ) {
}
Parameter
success
- Boolean, returniert false, wenn kein TextFormat Objekt Name übergeben wurde beim aufrufen von registerTextFormat oder wenn kein eingebettete Schrift im Beispiel Textfeld ist. Andernfalls wird true zurückgegeben.
name - string, vom Namen des kreierten TextFormat
Objektes im FontManager.
instance_mng - pointer zur FontManager Instanz welche die Registrierung aufgerufen hat;
textField - pointer zum formatierten Beispiel-Textfeld.
returniert
nichts
Beschreibung
Event. Wird gesendet direkt vor Registrierung des TextFormat Objektes im FontManager.
Weil der FontManager ein "broadcaster" ist, hat er auch alle Methoden und Eigenschaften dessen.
Beispiel
_root.createTextField("test_txt", 1, 0, 0, 200, 200);
_root.test_txt.text = new Array(30).join("Hello world! ");
font_mng.addListener(_root.test_txt);
_root.test_txt.onRegister = function(success, name, mng) {
if (!success) {
return trace("registerError : "+name);
}
trace("name:\n\t"+name+"\nfont:\n\t"+mng[name].font);
this.setTextFormat(mng[name], this);
this.wordWrap = this.embedFonts=true;
};
|