Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 31-05-2003, 11:19   #1 (permalink)
[Ernst Reiter]
 
Benutzerbild von Scrawer
 
Registriert seit: Jul 2001
Ort: austria
Beiträge: 3.691
Post .:workaround:. Fonts dynamisch Nachladen

Hallo, Jungs....
Da die Frage mal wieder aktuell ist und da mich das Problem auch lange verfolgt hat..... ich jedoch im Zuge eines
Projektes Anfang des Jahres eine akzeptable Lösung wie ich denke erreicht habe will ich hier mal den Kern des
Scriptes Posten.

Es geht und das Dynamische Nachladen von Fonts... und zwar egal in welcher Ebene, Levels, zugeladener Film
oder nicht usw.... und vor allem das umgehen Der Zwangsbeglückung mit 'export in das erste Frame'.
Bei meiner Umsetzung ging es dann so weit das es einen Font Ordner gibt in Dem swf Files liegen wo der User sich
Selbst einen auswählen konnte... aber kommen wir mal zur Grund Idee.

Da wir hier über das Thema schon sehr heftige Diskussionen hatten, geht es Nun mit einem Font aus der Bibliothek...
Einschließen hin oder her.. Export in erstes Frame blablabla... hat mir seiner Zeit Bokel den entscheidenden Anstoß
gegeben.
Und zwar Manuell ein Text Feld erstellen und die gewünschten Zeichen Einschließen. In dem Fall hat man zwar noch
immer die alten Probleme... Funktioniert nur im Hauptfilm... nicht bei zugeladenen und es wird wieder
Mal in Frame 1 exportiert..... aber über einen kleinen Umweg kommt man auf Die oben beschriebene Anforderung.
ActionScript:
  1. MovieClip.prototype.newTextField = function(fontName, insName, depth, initObject)
  2. {
  3.     var target, iID, i, $this = this;
  4.    
  5.     target = this.createEmptyMovieClip(insName+'Container', depth);
  6.     target.loadMovie('font_'+fontName+'.swf');
  7.    
  8.     var loadControl = function()
  9.     {
  10.         if (target.getBytesLoaded() >= target.getBytesTotal() && target.getBytesTotal() > 10)
  11.         {
  12.             $this[insName] = $this[insName+'Container'].tField;
  13.             if (initObject != undefined) for (i in initObject) $this[insName][i] = initObject[i];
  14.            
  15.             clearInterval(iID);
  16.             ASSetPropFlags(TextField.prototype, null, 1, 0);
  17.         }
  18.     }
  19.     iID = setInterval(loadControl,1);
  20. };
  21.  
  22. // ::: --------- :::
  23.  
  24. tfSettings = { 
  25.             _width:200,
  26.             _x:100,
  27.             border:false,
  28.             textColor:0xff0000,
  29.             type:'input',
  30.             text:'0123456a'
  31.          }
  32. _root.newTextField('bangle', 'txt', 1, tfSettings);
Dem ganzen liegt die Idee zugrunde das man mit einem manuell erstellten Textfeld genau das selbe machen kann wie mit
einem das über createTextField()... Im Prinzip macht die obere Funktion nichts anderes Als jedes mal das Fonts swf zu
laden in dem das manuelle Texfeld liegt, und mit diesem zu arbeiten wo ja eben der gewünschte Font mit eingeschlossen ist.
Weiteres wird der Pfad angeglichen damit man ganz gleich Arbeiten Kann als wäre das Textfeld über createTextField()
erstellt es macht null Unterschied. Da nach dem ersten mal das Font swf aus dem Cache kommt ist es auch vom speed her kein
unterschied. Nur Das man nun die Möglichkeit hat Wann auch immer wo hin auch immer einen Font nachzuladen.

Eines muss ich nur noch bei der Version oben erwähnen in dieses 'tfSettings' kann man im prinzip alles reinpacken was man
bei einem TextFeld einstellen kann... man kann natürlich auch später alles einstellen bzw. ändern sprich:

_root.txt.text = 'blablabla';

nur ist es wichtig zu erwähnen das das Textfeld auch schon 100% geladen ist... das tfSettings Object geht über die
loadControl... würdet ihr aber machen:

_root.newTextField('bangle', 'txt', 1);
_root.txt.text = 'blablabla';

würde das Feld zu 99% leer bleiben..... denn Flash braucht schon einen Bruchteil einer Sekunde um das swf zu laden
(beim ersten mal auch länger ) Aber wie gesagt wenn es mal geladen ist könnt ihr damit alles machen wie bei einem mit
createTextField() erstelltem.

Im Anhang habe ich ein kleines bsp. Wo ich den Font 'bangle' benutze und nur Die Zeichen '12345' eingeschlossen habe...
ihr werdet sehen das auch nur diese angezeigt werden... ein Zeichen das der Font 100% nicht vom System kommt....

An sich ist Die Idee sehr primitiv aber effektiv wie ich finde... evtl. Hat der eine oder andere dafür einen nutzen.....
bzw... wenn es in der Zwischenzeit schon bessere Möglichkeiten gibt, bitte melden...
bin im Moment nicht 100% am laufendem
Angehängte Dateien
Dateityp: zip fontnachladen.zip (5,8 KB, 246x aufgerufen)
__________________
Das Gesetz des Lebens liegt im Notwendigen. Der Reiz des Lebens liegt im Überflüssigen
m.f.g Scrawer (www.thinkspace.at)
Scrawer ist offline   Mit Zitat antworten
Alt 31-05-2003, 13:52   #2 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
sehr gute Idee, könnte ich auch gut gebrauchen, ABER es geht bei mir nicht :? Ich habe erst die font_bangle "compiliert", und dann die main. Wenn ich nun die main.swf starte, passiert nichts??
Janoscharlipp ist offline   Mit Zitat antworten
Alt 31-05-2003, 14:55   #3 (permalink)
[Ernst Reiter]
 
Benutzerbild von Scrawer
 
Registriert seit: Jul 2001
Ort: austria
Beiträge: 3.691
ja das wäre logisch.... wenn du den Font 'bangel' nicht am System hast... den beim compilieren versucht er eben diesen mit rein zu nehmen... nur findet er diesen in dem Falle nicht...

aber kannst ja einen anderen Font nehmen..

wenn alles funkt.. solltest im bsp... in roter schrift '12345' sehen....

ich hänge das font_bangel.swf für alle fälle mit an...
Angehängte Dateien
Dateityp: zip font_bangle.zip (768 Bytes, 129x aufgerufen)
__________________
Das Gesetz des Lebens liegt im Notwendigen. Der Reiz des Lebens liegt im Überflüssigen
m.f.g Scrawer (www.thinkspace.at)
Scrawer ist offline   Mit Zitat antworten
Alt 31-05-2003, 16:47   #4 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Alle Daumen hoch Scrawer,

als Erweiterung könnte man noch die üblichen Textfeld-Funktionen ud Eigenschaften vom aeusseren MovieClip auf das innere Textfeld umbiegen. Dann würde man fast gar keinen Unterschied mehr merken.

Vielen Dank für den Tip,
mfg r.

PS. Was machst du überhaupt die ganze Zeit ? Ich hab schon solange nichts mehr von dir gelesen ?
bokel ist offline   Mit Zitat antworten
Alt 31-05-2003, 17:09   #5 (permalink)
[Ernst Reiter]
 
Benutzerbild von Scrawer
 
Registriert seit: Jul 2001
Ort: austria
Beiträge: 3.691
wer ich? ... urlaub ... brauchte mal ne kreative Schaffens pause

p.s. die umbiegung gibt es schon:
$this[insName] = $this[insName+'Container'].tField;
somit funkt es mit _root.txt.text = ... usw....
__________________
Das Gesetz des Lebens liegt im Notwendigen. Der Reiz des Lebens liegt im Überflüssigen
m.f.g Scrawer (www.thinkspace.at)
Scrawer ist offline   Mit Zitat antworten
Alt 31-05-2003, 17:25   #6 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Ah, jetzt sehe ich es auch.

Merci,
mfg r.
bokel ist offline   Mit Zitat antworten
Alt 09-07-2003, 19:04   #7 (permalink)
Neuer User
 
Registriert seit: Mar 2003
Ort: Wien
Beiträge: 31
Nachdem mir das Einbinden der Schrift 24 k kostete (Flash ging von 8 auf 32 k!), realisierte ich eine andere Lösung. Ich machte ein Rechteckt in der gleichen Farbe wie der Hintergrund und legte es über das Textfeld darüber. Dieses in ein Movieclip umgewandelte Symbol liess ich nun in der umgekehrten Richtung faden!

Mein Flash wurde dadurch kaum groesser.
Bauer05 ist offline   Mit Zitat antworten
Alt 09-07-2003, 21:11   #8 (permalink)
rOb
Alter User
 
Registriert seit: Jun 2001
Ort: Bodensee-Metropole
Beiträge: 1.144
hi scrawer,

das konzept hört sich gut an.
hast das schonmal in einem projekt
verwendet? und das ganze mit
verschiedenen Browser / Cache
einstellungen ausprobiert?
wie z.b. mit "bei jedem zugriff nach
aktueller version suchen"?


be inspired würde madokan sagen


rob
rOb ist offline   Mit Zitat antworten
Alt 09-07-2003, 21:30   #9 (permalink)
[Ernst Reiter]
 
Benutzerbild von Scrawer
 
Registriert seit: Jul 2001
Ort: austria
Beiträge: 3.691
hi.... so weit ich das sagen kann..... ist es so das wenn beim browser no cache (bei jedem aufruf neu laden eingestellt ist)
das lade aktionen die flash ausführt... loadMovie sehr wohl gecacht werden... kann auch damit zusammenhängen das der flash player checkt das da das selbe MC öfter aufgerufen wird...
aber 100% behaupten könnte ich das nun nicht müsste ich nun austesten

ich verwende das selbe Prinzip für alles mögliche... smartClip like.. z.b. für komponenten usw.. wenn du z.b. bei mehreren content seiten die scrollPane oder sowas verwenden möchtest.. die hat auch immer hin 10 Kbyte....
so oder so ist es aber ratsam denn user am anfang eine info darüber zu geben.. wenn er no cache eingestellt hat das es den film verlangsamen kann...

somit ist mann auch bei den wenigen auf der sicheren seite... für alle fälle
__________________
Das Gesetz des Lebens liegt im Notwendigen. Der Reiz des Lebens liegt im Überflüssigen
m.f.g Scrawer (www.thinkspace.at)
Scrawer ist offline   Mit Zitat antworten
Alt 10-07-2003, 20:25   #10 (permalink)
rOb
Alter User
 
Registriert seit: Jun 2001
Ort: Bodensee-Metropole
Beiträge: 1.144
bisher habe ich da immer ne shared library verwendet,
das funzt ganz gut, hat aber auch einige nachteile.
z.b. muss man die objekte vorher auf die bühne gezogen
haben.


ich werde dein konzept auf jeden fall mal ausprobieren.
rOb ist offline   Mit Zitat antworten
Alt 11-07-2003, 09:29   #11 (permalink)
[Ernst Reiter]
 
Benutzerbild von Scrawer
 
Registriert seit: Jul 2001
Ort: austria
Beiträge: 3.691
richtig..... genau das ist der grund...
wobei du es nur brauchst wenn du dynamisch arbeitest.. sprich bei einer content side noch gar nicht feststeht was es für module benötigt.... dann kannst sie so zur laufzeit eben nachladen....
__________________
Das Gesetz des Lebens liegt im Notwendigen. Der Reiz des Lebens liegt im Überflüssigen
m.f.g Scrawer (www.thinkspace.at)
Scrawer ist offline   Mit Zitat antworten
Alt 11-07-2003, 10:42   #12 (permalink)
[+]
 
Benutzerbild von André Michelle
 
Registriert seit: Dec 2002
Ort: cologne
Beiträge: 2.271
Zitat:
z.b. muss man die objekte vorher auf die bühne gezogen
haben.
Es reicht auch sie in einem exportierten MovieClip zu plazieren.
Auch nicht schön, aber so bleibt die Bühne leer.
__________________
aM

blog | laboratory | tonfall | processing

Audiotool.com
André Michelle ist offline   Mit Zitat antworten
Alt 11-07-2003, 11:52   #13 (permalink)
[Ernst Reiter]
 
Benutzerbild von Scrawer
 
Registriert seit: Jul 2001
Ort: austria
Beiträge: 3.691
@ Michelle.. beitrag nicht ganz gelesen oder
__________________
Das Gesetz des Lebens liegt im Notwendigen. Der Reiz des Lebens liegt im Überflüssigen
m.f.g Scrawer (www.thinkspace.at)
Scrawer ist offline   Mit Zitat antworten
Alt 11-07-2003, 12:04   #14 (permalink)
[+]
 
Benutzerbild von André Michelle
 
Registriert seit: Dec 2002
Ort: cologne
Beiträge: 2.271
doch doch !

Mein Posting bezog sich nur auf rOb.
Ich denke, dass er nicht Fonts meinte, die er auf die Bühne plazieren muss :o)
__________________
aM

blog | laboratory | tonfall | processing

Audiotool.com
André Michelle ist offline   Mit Zitat antworten
Alt 11-07-2003, 14:33   #15 (permalink)
[Ernst Reiter]
 
Benutzerbild von Scrawer
 
Registriert seit: Jul 2001
Ort: austria
Beiträge: 3.691
naja
Zitat:
Es reicht auch sie in einem exportierten MovieClip zu plazieren.
von dem Prinzip sprachen wir die ganze zeit.... es eben in ein MC auszulagern und dieses nachzuladen..
egal ob textfeld komponente oder sonst was......

ist immer das selbe prinzip

aber lange rede kurzer sinn unterm strich reden wir alle vom selben... wenn auch ab und zu an einander vorbei
__________________
Das Gesetz des Lebens liegt im Notwendigen. Der Reiz des Lebens liegt im Überflüssigen
m.f.g Scrawer (www.thinkspace.at)
Scrawer ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 16:53 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele