pokročilé štádium flashitizmu

Keďže sa dnes nič výnimočné nestalo (hmm… to mi pripmína hlásenia veliteľovi roty po nočnej službe), pochválim sa aspoň dnešným tvorivým cvičením.

Tentokrát ide o vizuálne pôsobivejšiu verziu mojej prvej náhodnej animácie. Celkom som sa s tým potrápil, pretože ma Flash proste nechcel počúvať. Pája ako zdroj informácií zlyhal a tak som sa musel obrátiť na Slasha. Lenže kým mi ten stačil odpovedať, tak som sa naštval a urobil som to nejako inak (alebo som prišiel na to, ako by to odo mňa Flash chcel). Takto som na Nyxe z klubu o Flashi zmazal asi štyri otázky ešte predtým, než na ne ktokoľvek stihol zareagovať.

Celkom ma prekvapila jedna vec. Flashisti sa DHTMListom smejú, že musia používať rôzne hacky a workaroundy. Ja však mám dojem, že celý Flash je jeden veľký hack. Čokoľvek aspoň trošku komplikovanejšie v ňom treba urobiť tak trochu nelogicky. Prečo? Pretože je to tak urobené. Objektu sa priraďuje meno tu. Ale ak treba urobiť toto, tak mu meno priraď tam. Pritom ide o ten istý typ objektu. Alebo… Chcem dynamicky vložiť duplikát objektu do konkrétnej vrstvy. Nemôžem vkladať objekty do vrstvy, musím si vytvoriť prázdny objekt, vložiť ho do tej vrstvy a duplikáty vkladať do toho prázdneho objektu. Hurá! Ďalšia finta – v jednej metóde sa na objekt odkazuje bez úvodzoviek (čo je logické), ale v inej metóde sa na objekt odkazuje pomocou stringu. V obidvoch prípadoch sa posiela jeho meno, lenže raz ako premenná a raz ako reťazes. No výborne, lenže kto si má pamätať kedy ako?

Flash je pekný. Dajú sa v ňom robiť pekné somarinky (áno Slavo, nielen somarinky ale aj eShopy, diskusne fora a obrovske dynamicke projekty previazane pomocou XML s databazou bla bla bla… lenže načo také veci robiť vo Flashi?). Lenže mu chýba… ako by som to povedal? Koncepcia. To je to slovo. Ako by povedal kpt. (vlastne teraz už mjr.) Žiška: „Najprv sa treba koncepčne a normotvorne zamyslieť.“

Nechcem tým teraz nenápadne naznačiť, že s Flashom končím a že ho odvrhujem raz a navždy. Chcem len vyjadriť svoje zklamanie nad tým, že nesplnil moje očakávania. Flashitisti tvrdia, že Flash je univerzálne crossplatformové crossbrowserové prostredie, lenže v skutočnosti je to taká istá džungľa ako HTML a JS dohromady (a možno že aj horšia). Napríklad tie tri jednoduché príklady, ktoré som doposiaľ pozbuchal, sa mi akosi nepodarilo vyexportovať tak, aby to bolo kompatibilné s Flashom 5 (nehovoriac už o štyrke). Užívateľ teda musí mať Flash plug-in 6. No… to by sa mi skriptovalo oveľa radostnejšie, keby všetci užívatelia mali iba Mozillu a Explorer 6.

PS: Je mi jasné, že s tým exportom je chyba niekde na mojej strane a že tie primitívnosti určite musia fungovať aj vo Flashi 5. Ale ja sa proste musím vyjadriť negatívne, pretože ma dnes Flash hrozne zklamal.

fczbkk
fczbkk
6 komentárov
pred pár rokmi

Komentáre

 

sorry, ze som ti na to skor nestihol odpovedat, ale mal som velmi bussy den, takze som sa ku klubu dostal az po 12tej..
tvoj problem je v tom ze cakas ze ti to pojde hned a lahko.
Ano aj ked je Action Script, gramaticky a syntakticky velmi podobny az zhodny z Java Scriptom , neznamena to ze neskuseny flashista ale skuseny Java Scriptista v nom hned spravi vsetko na co si pomysli..
Velky rozdiel medzi AS a JS je prave v tom ako Flash vnima lokalne a globalne premenne, aku ma konverziu datatypov, ako su dostupne premenne v zavislosti na casovej osi a akym sposobom je mozne vytvarat a modifikovat objekty.
Ten priklad co si nam prave predviedol je pomerne jednoduchy zopar-riadkovy AS , robota tak na 10–15 minut.
Vobec si pri nom nemal pouzit duplicate movie clip, nie je zapotreba ani ziadnych hackov ci workaraundov.
Ale ja som musel napriklad dnes pouzit jeden hack , (ci workaround) na Mozillu, lebo ako sa zda, Mozilla potom co je dokument nahraty do browsera , nie je schopna preloadovat nove images do cache.
Co ma velmi neprijemne prekvapilo…

 

Pozrel som si zdrojak k tomu tvojmu flashu a niekolko postrehov:
vo flashi nie je nutne k animacii pouzivat „setInterval“ – to je prave dovod preco ti to nefunguje v Flash5. Je to novinka v MX.
Normalne sa na animaciu pouziva handler onClipEvent(en­terFrame)
Je zvykom urobit si jeden prazdny movie clip (ctrl+F8) a nazvat ho napriklad process. Netreba zabudat pomenovat aj instancii tohto klipu ako „process“, lebo len to ze sa vola process v kniznici ti nijako nepomoze..


do toho clipu si


onClipEvent(load){
//bla bla
}
mozes dat variables ktore potrebujes aby sa ti z inicializovali na zaciatku..
ked tento klip umiestnis na hlavnu os, tak je dolezite ze k nemu pristupujes cez _root.process
a potom v tom istom klipe mozes mat spominany event handler


onClipEvent(en­terFrame){
//bla bla
}
kde s kazdym pre pristupom na tento frame sa ti vykona prislusna akcia vo vnutry tohto handleru.
Ako casto , to zavisi na realnom framerate pocitaca a nastavenom framerate pre cely movie clip (napriklad 25 f/s)
takisto uz nie je potrebne vypisovat setProperty(ob­j,_x,rnd(0, 550))
da sa to zapisovat ako _root.obj._x=rnd(0, 550);
vyhoda tohto zapisu je ze pokial by bol v slucke for i=0; … i++,
tak sa da ten nazov pre objekty skladat v pohode aj takto :
_root[„objName“+i]­._x=…
co v Java Scripte takto nefunguje..
ale aby som povedal pravdu zase ten tvoj kod vobec nie je spatny a urcite by s teba bol vinikajuci flashista , keby si dal flashu sancu a este sa s nim pohral..
Naprilad toto cvicenie by si mohol skusit prerobit tak ze vytvoris novy movie clip programaticky a gradientne ho zafarbis ties programaticky. Tym padom ti odpadne duplikovaie, alebo attachovanie uz existujucich movie clipov..

 

slash: Neviem ako je to v MXku, ale ako sa ja pamatam z patky tak s _root som si narobil strasne problemy.

Spravil som si totiz stranku(och, jak som sprosty) s kopcom eventov prave s pomocou spominaneho _rootu. Neskor som sa rozhodol rozsekat to na viac SWFciek a vtom bol prave problem. _root je odkaz na najvyssi movie clip. Ostatne SWF su pod nim ako nejake dalsie clipy. Ak teda nejaky SWF clip hlbsie v tomto SWF-strome zavola _root tak to uz nebude ten clip co ocakava.

Kym som na to dosiel tak som sa poriadne potrapil. Myslim teda, ze s hladiska elegancie kodu a pouzitelnosti flash animacie v buducne by bolo lepsie pouzivat _parent. Ak sa mylim tak ma prosim oprav, ok?

Dufam, ze mi prepacite neodborny vyklad lebo v slovniku flash vyrazov som naozaj zaostaly.

PS. Zaujimalo by ma ako sa vo flahi MX dokazem nakreslit konkretny pixel. Napriklad nejaky pixelart bez toho aby to antialiasoval. Skusal som to vypnut v library ale pri animaci sa to zmrsi. Taktiez ked dam quality na low. Som v tomto uplne bezradny. Viem, ze flash je na vektory, ale toto predsa nejako musi ist.

 

Johno: Aj ked toto skor patri do mojho Flash klubu na Nyxe, predsa len aspon nieco :


_root. treba samozrejme pouzivat s rozumom, urcite nie v klipoch ktore sa chystam externe linkovat do nejakeho ineho klipu (ked sa to vsak nahadov/nechtiac stane , odporucam pouzit find & replace „_root“ za „this“).


pouzivanie _root je vyhodne najme pri definovani a odkazovni sa na global variables , takze je pritom mozne z hocijakeho klipu (napriklad _root.clipA.clip­B.clipC.clipD) zadefinovat alebo zmenit _root.myGlobal­SoundFX ktora bude stabilne accessible odkamkolvek.


co sa tyka Flashu tak na pixel art pokojne zabudni. Sice nie je ziaden problem nakreslit 1×1 pixel stvorec (hlavne ked si clovek zapne pixel snapping) ale pri prehravani sa ten pixelovy stvorec bude antialiasovat. Pomoze len nastavenie kvality na low, ale v tom pripade bude aliasovane vsetko a to nie je vatsinou prave zelatelny vysledok.


Aj ked Flash nepodporuje selektivne aliasovanie,
vatsinou sa da dosiahnut a to bud tak, ze sa v nom pouzije aliasovana bitmapova grafika , v ktorej sa pri library setting , uncheckne :" allow smoothing", alebo (v pripade pixel fonts) sa umiestnuju na poziciu bez desatinnych miest.

 

slash: na nyx.cz by som to samozrejme napisal radsej, ale tam by som musel byt najprv registrovany. A to ako som zistil je pre mna vcelku problem.

 

RIki celkem hezky vystihl pocit vetsiny programatoru, kteri se kdy museli potykat s jakymkoliv client-side jazykem.
Je to hezke, ale chybi tomu koncepce. To je presne co jsem ja pocitil pri studiu css a javascriptu. To same flash a curl – ale v horsim.....

 

Pridaj komentár

Komentáre môžu pridávať iba prihlásení užívatelia.