. .. : Swf.hu 1.0 archívum : Swf.hu főoldal >>> : .. .




 
 
SEGÉDLETEK Flash alapok

Szövegdobozok - és a varázsszó: embedding (beágyazás)
  feltöltve: 2005.08.18 | szerző: jucka | olvasva: 13622 alkalommal

       
 
Naponta visszatérő probléma a Fórumban a szövegmező, ezen belül is leginkább a dinamikus szövegmező használatakor fellépő, értetlenkedésre okot adó működésképtelenség. A szénakazlat, amit a témában összehordtam, szétbontjuk és ízekre szedjük. Úgyhogy ide várlak, még mielőtt a fórumba jönnél kérdésedet feltenni...


...még mindig nem látszik!  —  Dinamikus szövegmezők

A dinamikus szövegmező az, amit a leggyakrabban használsz, ugye? A legtöbb bosszúságot is okozzák egyben. Úgyhogy megkezdjük a szénakazallal való munkánkat - velük. Grált nem keresünk, de a tűt, azt meg fogjuk találni.


forgatnám-tükrözném... és eltűnik!  -  transzformáljunk

Ahhoz, hogy egy dinamikus szövegmezőt transzformálj valamilyen módon, nem sokat kell tenned, mindössze kijelölnöd a szövegmezőt és elvégezned a neked tetsző átalakítást. Nem csak a mérete változtatható, hanem forgatható, meg is tükrözhető, sőt nyújtható is és dönthető...   Hoppsz! Eltűnt a szövegmeződ tartalma?!? Vagy nem akar működni a betűtorzítás a scale érték változtatásakor?
Íme a tű, minden galiba okozója: a beágyazatlan betűtípus. A beágyazás (embedding) többféle módon is megvalósítható. Vegyük az egyszerűbbet előre. A színpadra kézzel kitett szövegmező esetét.

EMBEDDING

A szövegdobozt jelöld ki, hogy hozzáférhess tulajdonságaihoz a Properties panelen.
A Properties panel a Window / Properties útvonalon található, vagy nyomj egy Ctrl+F3 billentyű kombinációt. A panelen a szövegmező minden tulajdonsága elérhetővé válik számodra, most viszont épp arra az egyre fókuszálunk, ami miatt idejöttél. A Character... gomb lenyomásával az MX és MX2004-es verziójú Flash-ben is választási lehetőséget kapsz arra, milyen mennyiségben ágyazol be karaktereket az adott betűtípusból. Az MX2004 természetesen több funkcióval rendelkezik elődjénél.

Mindjárt meg is akadt talán a szemed egy kifejezésen az MX karakter opciók ablakának vizsgálgatásakor -- Embed Font Outlines For...   Ezt most nem vesézzük ki, de jegyezd meg, mert visszatérünk rá.

Az MX ötféle lehetőséget kínál a beágyazásra és egyet arra, hogy ne ágyazz be semmit :)  Kiválaszhatod az összes karakterét a betűtípusnak, vagy négy különböző sorozatot, illetve ezek kombinációit. Plusz szolgáltatás továbbá, hogy a kiválasztott karakterek mellé további karaktereket illeszthetsz, kiküszöbölve ezzel egy teljes sorozat embed-elését, amikor várhatóan csak néhány darabjára lesz szükséged. A Help feliratú gomb funkciójáról gondolom van némi fogalmad, szerintem nyomd is meg. Mindennemű kitérő és külön keresgélés nélkül feljön a súgó font-okra vonatkozó része. Tájékozódhatsz többek között arról, mikor érdemes beágyazni a használt betűtípust és mikor lehet értelme annak, hogy ezt ne tedd meg. A Flash-t dinamikus és input szövegmezők használatakor is utasíthatod arra, hogy rendszer font-okat használjon. Mégpedig a _sans, _serif, illetve _typewriter betűválasztással. Ebben az esetben jó eséllyel úgy jelenik meg a betű, ahogy nálad teszteléskor, tudnillik ezek a Windows-os gépeken általában azonosak: _sans (Helvetica vagy Arial), _serif (Times Roman), _typewriter (Courier). Amikor publish-olod vagy exportálod a dynamic vagy input szövegmezőket tartalmazó Flash dokumentumodat, a beágyazatlan vagy device betűtípus esetén a Flash elraktározza a szövegmezőben használt font nevét. Ezt használja majd a player az azonos vagy hasonló betűtípus megkereséséhez a felhasználó rendszerén az swf futtatásakor. A beágyazatlan font-ok "recegősen" jelennek meg, koránsem olyan telt a betűkép, mint egy beágyazott font-nál, 10 pt alatti betűmérethez ajánlja a súgó. A magam részéről azt gondolom, hogy nagyon jól eltalált méret+típus kell ahhoz, hogy ez jó lehessen - ráadásul nem rendszer font esetén a választott betűtípus megléte sem garantált a felhasználó gépén.

Az MX 2004 láthatóan több variációval szolgál, bár valószínű, hogy a lehetőségek közül leginkább az első öt közül fogsz választani. Egérgombbal, illetve egérgomb majd Shift+egérgomb, nem egymás alatti Unicode szakaszoknál egérgomb majd Ctrl+egérgomb kombinációval jelölheted ki őket. Itt kapsz tájékoztatást arról is, hány darab karakter található egy sorozaton belül és a sorozatokból kiválasztott betűképeket (glyphs) összegezve is láthatod az ablak alján. Apró bug: az általad beírtakat figyelmen kívül hagyja. Az Auto Fill egy további lehetőség arra, hogy minimalizáld a beágyazott karakterek számát. Használata: a szövegdobozba másold be a szövege(i)det, ami(ke)t tartalmaz majd a szövegdoboz. Rövid, vagy kevés lehetőség közül kiválasztódó szövegmező-tartalmaknál ajánlatos. OK gomb, majd töröld a mintaszöveget.

Ugyan nem a karakter opciók kisablakban található, de a témához szorosan kapcsolódó választási lehetőség az Anti-Alias (élsimítás) kikapcsolása. A Flash ebben az esetben ilyen módon ágyazza be és exportálja a font-ról kapott információkat.
A beágyazást minden újonnan létrehozott szövegmezőnél be kell állítanod, különben a futó file továbbra is a helyi gépen fogja keresni a betűtípust és nem működik majd a szövegdoboz transzformálása sem. Ettől még a Flash csak egyszeresen exportálja a betűképeket.
Most, hogy beágyaztad a felhasználásra váró font-ot, biztos lehetsz benne, hogy teszteléskor, sőt tán még az örökévalóságnak is megmarad a szövegmeződ tartalma, akármilyen módon transzformálod.

Rendben van, végre megjelent a szöveg. De egy kicsit beleolvasgatva szörnyű hibára leszel figyelmes: hiányoznak, vagy átíródtak benne a magyar karakterek, pedig az MX verzióban a szöveg hibátlanul megjelenik! A hiba oka a két Flash eltérő karakterkezelése.

UNICODE

Az előbb már egy pillanatra feltűnt a Unicode, mint kifejtetlen fogalom. De mielőtt rátérnénk, egy picit belecsippentünk az ASCII és a karakter fogalmába. A karakter maga absztrakt fogalom. Ha megkérlek, rajzolj nekem egy A betűt, az sokféleképpen lehet A betű. Az elvont "A" karaktert leképezed glyph-é (betűképpé).

Hajnalok hajnalán az ASCII 7 bit-en tárolta a karakterek betűképeit (szabványos ASCII, 128 jel), később 8 bit-en (bővített ASCII, 256 jel). Ebbe a Latin ábécé kis és nagy betűi, számjegyei, írásjelei, a nyugat-európai nyelvek különleges karakterei valamint néhány kiegészítő és grafikus karakter fért bele. A magyar ő és ű nem. Ezért volt a sok pancsolás a betűtípusokkal - ha ékezethelyes magyar betűképet akartunk, le kellett cserélnünk a kalapos, illetve hullámos glyph-eket. Az ASCII története nem lenne teljes, ha nem szólnánk az ANSI-ról és az úgynevezett escape-szekvenciákról. Az ANSI (American National Standards Institute) az amerikai üzleti és ipari csoportok által a második világháborút követően megalapított non-profit szervezet, amelynek feladata a különböző szabványok kidolgozása és nyilvántartása. A szervezet ugyanis idejében felismerte, hogy egy világméreteket tekintetbe vevő kódoláshoz 128 karakter semmiképpen nem lehet elég. A kor 7 bites hardverei azonban nem adtak lehetőséget ennek a korlátnak az átlépésére. Így (Bemer volt az elkövető) kidolgozott egy escape- (váltó-) szekvenciát: azzal a számítógépek áttérhettek egyik kiosztásról a másikra. 1963 óta több mint 150-féle ilyen kiterjesztést, ASCII-n kívüli ábécét definiáltak.
A hősidők elmúltak és megjelent a Unicode. Kettő, illetve négy byte-on tárolja az adatokat! Az összes korábbi 8 bites kódolású készletben megtalálható karakter belefért a Unicode kezdeti alsó 65536-os tartományába (Basic Multilingual Plane), a négy byte-os megfeleltetési rendben pedig minden beszélt, holt és egyéb nyelv (pl. Braille) karakterei (betűk, számok, írásjelek, stb.) helyet kaptak. Ami igazán fontos viszont, hogy minden egyes karakternek egyedi száma és neve van. E kódtáblázat első 128 helyén egyezik az ASCII táblázattal (Latin-1), első 256 helyén pedig a bővített ASCII / ANSI táblázattal.
A különböző rendszerek kompatibilissá tétele okán, illetve helymegtakarítás végett megjelent a Unicode szabvány UTF-8 ábrázolási módja, amely lehetővé teszi, hogy Unicode két illetve négy bájtos karakterkészletet (standard tárolási módja az UCS-2 illetve UCS-4) 8 bites formába kódoljuk. A név az UCS Transformation Format rövidítése, a 8-as szám pedig utalás a 8 bites egységekre. Itt megjegyzendő, hogy a tipikus magyar szöveg a Latin-2-es ábrázolásmódjához képest durván számolva 10%-nyi növekedést mutat, tehát ebben az esetben nem beszélhetünk helymegtakarításról :)
És itt a különbség a karakterkezelésben: míg az MX UTF-8 kódolással értelmezi több-kevesebb hibával a Unicode értékeket és a nem Unicode-os betűtípusokat is kezeli, addig az MX 2004 full Unicode alapú megfeleltetési táblát használ, exportnál két byte-os tárolást alkalmazva. Tapasztalatom szerint a TrueType formátumú Unicode font-okkal mindkét Flash elboldogul, míg az OpenType szabvány alapján készültekkel némi gondja akad az MX-nek. Persze korántsem mondhatom, hogy mindenre kiterjedő tapasztalatokkal bővítettem a tudásmorzsáimat, tehát szívesen venném, hogy aki tud a témában információkkal szolgálni, megtenné ezt a hozzászólasok blokkban. Ha szükséged lenne rá, itt találsz néhány táblázatot a magyar (és még néhány egyéb) nyelv kódtáblájának módosított karakterkiosztásával. A FontLab4 el tudja végezni a "glyph reencode"-ot így nem neked kell maszatolnod a betűkkel, a Fontographer úgy tudom nem.
Mivel meglehetősen extrém méretet öltene a kimeneti file, ha az összes glyph-jét beágyaznánk egy-egy Unicode karakterkészletű betűtípusnak, válasszunk értéktartományt. Ezeket a Flash MX 2004 a UnicodeTable.xml nevű file-ban tárolja a c:\Program Files\Macromedia\Flash MX 2004\en\First Run\FontEmbedding\ útvonalon. A magyar karakterek listáját, amivel bővíthetjük a feljövő Character Options ablakot Kopi1 fedőnéven küldte be valaki a fórumba. Íme:

<glyphRange name ="Hungarian " id ="26" >
<range min ="0x00C1" max ="0x00C1" />
<range min ="0x00C9" max ="0x00C9" />
<range min ="0x00CD" max ="0x00CD" />
<range min ="0x00D3" max ="0x00D3" />
<range min ="0x00D6" max ="0x00D6" />
<range min ="0x00DA" max ="0x00DA" />
<range min ="0x00DC" max ="0x00DC" />
<range min ="0x00E1" max ="0x00E1" />
<range min ="0x00E9" max ="0x00E9" />
<range min ="0x00ED" max ="0x00ED" />
<range min ="0x00F3" max ="0x00F3" />
<range min ="0x00F6" max ="0x00F6" />
<range min ="0x00FA" max ="0x00FA" />
<range min ="0x00FC" max ="0x00FC" />
<range min ="0x0150" max ="0x0150" />
<range min ="0x0151" max ="0x0151" />
<range min ="0x0170" max ="0x0170" />
<range min ="0x0171" max ="0x0171" />
</glyphRange>

Az id maradjon, hogy ne kerüljön felülírásra egy már működő kódrész, a besorolás helye izlés szerinti. Hasznos darab. És ha valaki netán belebotlott már ebbe a témakörbe - az ISO10646 nem azonos a Unicode-dal. Két külön szálon futó projekt-ről van szó, de a karaktertáblák kompatibilisek egymással.
De miért is fontos annyira a Unicode fogalma, hogy ennyi időt áldozunk rá? A válasz kézenfekvő: nem árt tudni mi felé haladunk és főleg, hogy miért. Most egyelőre még nagy kavar van a kódlapok és konverziós függvényeik körül, de a haladás iránya lemérhető mind a keresztplatformos betűformátum-leírás, a Unicode alapú OpenType megjelenésében, mind a lemaradni nem akaró fejlesztőkörnyezetek és rendszerek Unicode-ra, illetve Unicode-on belüli UTF-8-as kódolásra való átállásában. Az egyre inkább jelentkező igényeknek megfelelően a betűkészleteknek "multiplatform"-osakká és többnyelvűséget támogatóakká kell válniuk és nem illene elbotolniuk egy nyitó idézőjelen például :)
Az "egy_betű-egy_byte" nem megoldás többé. A többnyelvűség nem megoldható 8 bites karakterkészlettel.


még mindig száz!  -  alfázzunk

A szövegmeződ tartalmának _alpha tulajdonságán szeretnél változtatni? Kijelölendő a szövegmezőt kattints rá, majd a Color Mixer palettán (Shift+F9), húzd le a betűszín Alpha-ját. Hogy biztos lehess abban, hogy a betűszín alfáját húzogatod, kattints a Text Color ablakocskába, válaszd ki a színt és most állítsd át a panel tulajdonság-mezőit.



Várhatóan tudod már mi következik, ugye? Igen. Ágyazd be a betűtípus glyph-jeit...  Akkor ezt kipipálhatjuk. De mi van, ha a szövegmezőt dinamikusan hoztad létre? Mondjuk így:

this.createTextField("szoveg", 1, 50, 50, 300, 50); // szövegmező létrehozása
szoveg.text = "Első számú szabály: ágyazd be a font-ot!"; // tartalma
szoveg._alpha = 0; // alfa értéke

Meg sem nyekken...
 
       
 
 

© Devnet.hu. A segédletek semmilyen formában nem másolhatók, publikálhatók a Devnet.hu és a szerzők közös írásos engedélye nélkül.
 
. .. : Swf.hu 1.0 archívum : Swf.hu főoldal >>> : .. .