Navigace

Hlavnφ menu

 

ActionScript 2.0

Ako nadÜenci Flashu urΦite vedia, Macromedia v novom Flashi uviedla aj nov· verziu programovacieho jazyka ActionScript. Ke∩₧e novß verzia mß na konci oznaΦenie 2.0, star· premenovali na ActionScript 1.0 (AS1.0). Je to sφce u₧ nejak² Φas od uvedenia novΘho Flashu, ale lepÜie nesk⌠r ako nikdy, a tak si o ActionScript 2.0 (AS2.0) nieΦo povieme, ukß₧eme a vysk·Üame.

Zanietenφ flasheri sa u₧ urΦite doma hrali s nov²m ActionScriptom 2.0 a aj Φφtali Φlßnky na internete. Aj ja som sa po internete poobzeral a naÜiel som ich ve╛a. VΣΦÜinu vÜak v angliΦtine - pre t²ch, ktor²m sa ╛ahÜie Φφta po Φesky alebo slovensky som ich na Φesk²ch a slovensk²ch strßnkach naÜiel len pßr. Na druhej strane je pravda, ₧e kto chce robi¥ vo Flashi, mal by vedie¥ Φo to po anglicky. VÜetko to vÜak boli len ·lomky a ΦiastkovΘ informßcie a tak som sa rozhodol napφsa¥ sΘriu Φlßnkov, z ktor²ch by ste vÜetci (zaΦiatoΦnφci aj star² sk·senφ programßtori) pochopili, o Φom ActionScript 2.0 je a ako ho sprßvne a Φo najefektφvnejÜie pou₧φva¥.

Ke∩₧e plßnujem sΘriu Φlßnkov, rßd by som v nej popφsal nasledovnΘ:

  • Φo je novΘ v ActionScript 2.0
  • OOP (object oriented programming) s ActionScript 2.0
  • vytvßranie tried (class)
  • dedenie (inheritance)
  • interface (tvorba a implementßcia)
  • prßca s ActionScript 2.0, novΘ preddefinovanΘ triedy, prφkazy, tipy a triky
  • ako vytvori¥ vlastn· triedu
  • ako vytvori¥ vlastn· aplikßciu
  • ako vytvori¥ vlastn· hru
  • ako vyu₧i¥ ActionScript 2.0 Φo najefektφvnejÜie

Ak ste nenaÜli nieΦo, Φo by vßs zaujφmalo, alebo mßte inΘ nßvrhy, ktorΘ by mohli ostatn²ch flasherov zaujφma¥, napφÜte ich, prosφm, do prφspevkov pod tento Φlßnok.

Tak hor sa do toho...

Viem si vßs ₧ivo predstavi¥, ako nadßvate, ₧e ste sa eÜte nestihli nauΦi¥ ani ActionScript 1.0, a u₧ je tu nov² programovacφ jazyk. Musφm vßs vÜetk²ch upokoji¥, ₧e to nie je a₧ takΘ zlΘ, ako sa zdß. Kto u₧ predt²m robil v ActionScript 1.0, nebude ma¥ problΘmy nauΦi¥ sa pracova¥ aj s nov²m ActionScriptom. Dalo by sa poveda¥, ₧e novß verzia je z vΣΦÜej miery rovnakß ako verzia 1.0. ZjednoduÜene, ak ste predt²m neprogramovali svoje vlastnΘ triedy a nepou₧φvali komponenty, tak rozdiely medzi AS1.0 a AS2.0 s· ve╛mi mierne.

ActionScript 2.0 je v oboch verzißch novΘho Flashu, Flash MX 2004 aj Flash MX 2004 Professional. V oboch verzißch vÜak m⌠₧ete aj na∩alej pou₧φva¥ AS1.0. StaΦφ si v "Publish Settings" v zßlo₧ke "Flash" nastavi¥ "ActionScript version" na ActionScript 1.0. S AS1.0 m⌠₧ete publikova¥ aj pre Flash Player 6, aj pre Flash Player 7. Neodpor·Φa sa kombinova¥ AS1.0 s AS2.0, z jednoduchΘho d⌠vodu, ₧e to nebude fungova¥. Mo₧no by ste naÜli pomieÜanΘ skripty, ktorΘ by fungovali, ale je to sk⌠r ojedinelΘ.

V²ber z verzie ActionScriptu v Publish Settings
V²ber z verzie ActionScriptu v Publish Settings

Tak naΦo vlastne potrebujeme nov² ActionScript? Flash programßtori mali pri programovanφ objektovo orientovan²ch aplikßciφ ove╛a ¥a₧Üiu ·lohu, ako kolegovia programßtori v in²ch jazykoch (Java, C++, C#). Prßca s vlastn²mi triedami, dedenφm a objektmi bola zlo₧itejÜia, komplikovanejÜia a nemotornß. Flash programßtori museli ovlßda¥ vÜetky procesy, ktorΘ sa dej· v pozadφ pri definovanφ tried a dedenφ. V ActionScript 2.0 sa im bude pracova¥ ove╛a efektφvnejÜie, intuitφvnejÜie. ActionScript 2.0 prinßÜa ove╛a vΣΦÜiu podporu OOP a podobß sa viac Jave, JScript.NET a JavaScript 2.0. Programßtori, ktorφ pracovali alebo pracuj· v t²chto jazykoch, sa v AS2.0 bud· cφti¥ ako doma, vÜetky tieto jazyky s· toti₧ zalo₧enΘ na ECMAScript Edition 4 proposal (ide vlastne o predpis pre programovacie jazyky).

Dobre, mo₧no si poviete, ₧e vy neprogramujete aplikßcie. Mo₧no prßve vy tvorφte hry alebo interaktφvne prezentßcie. Dobrß sprßva je, ₧e AS2.0 prinßÜa v²hody taktie₧ pre t·to tvorbu. Vo vΣΦÜine seri≤zneho programovania vo Flashi budete pracova¥ a urΦite aj pracujete s triedami, objektmi a komponentmi, tak₧e v²hody AS2.0 sa vßm zφdu.

Ke∩ nahliadneme pod pokr²vku prßce s AS2.0, zistφme, ₧e Flash pri kompilßcii (exportovanφ) konvertuje zdrojov² k≤d ActionScript 2.0 na ActionScript 1.0 ekvivalent, na takzvanΘ "bytecodes", ktor²m Flash Player rozumie a vie ich interpretova¥. D⌠vod je spΣtnß kompatibilita AS2.0 s Flash Player 6. AS2.0 naoko pou₧φva nov² syntax, ale za oponou sa stßle skr²va star² znßmy prototype a veci s nφm spojenΘ. Macromedia sama nazvala AS2.0 "syntactic formalization of the prototype chaining method".

╚o je novΘ v ActionScript 2.0?

V skratke by sa to dalo vymenova¥ asi takto:

  • striktnΘ definovanie premenn²ch a vylepÜenΘ varovania pri kompilovanφ
  • "code hinting" (pomoc pri pφsanφ k≤du), zalo₧enΘ na dßtov²ch typoch premenn²ch
  • novΘ k╛·ΦovΘ slovß (keywords) ako class, interface, extends, implements, public, private, static, dynamic, intrinsic (p⌠vodne len pre internΘ pou₧itie Macromedie), import, class path (package), get a set
  • "case sensitivity", Φi₧e rozliÜovanie ve╛k²ch a mal²ch pφsmen
  • formßlny syntax pφsania tried (pod╛a ECMAScript Üpecifikßcie)
  • balφky tried (packages) a cesta k triedam
  • getter/setter met≤dy pre efektφvnejÜiu prßcu s vlastnos¥ami tried
  • nov² sp⌠sob dedenia
  • interfaces û v ActionScripte 2.0 ·plne novß vec
  • nov² model vysielania udalostφ (broadcasting event model)
  • novΘ prφkazy a preddefinovanΘ triedy ako Camera, PrintJob a ∩alÜie

StriktnΘ definovanie premenn²ch (Strict Data Typing)

Ide vlastne o to, ₧e pomocou Strict Data Typing definujete premennΘ, ktorΘ m⌠₧u obsahova¥ len jeden dßtov² typ. Naprφklad definujete premenn·, ktorß je dßtovΘho typu Number (Φφslo). Tejto premennej potom nem⌠₧ete priradi¥ ₧iadny in² typ dßt ako Φφslo. Ak priradφte in² dßtov² typ, pri kompilovanφ sa vygeneruje chyba. StriktnΘ definovanie premennej pomßha zabezpeΦi¥, ₧e pou₧φvate tie sprßvne praktiky k≤dovania, zlepÜuje Φitate╛nos¥ k≤du (najmΣ ak pracujete v tφme) a pomßha eliminova¥ ve╛a ch²b, ktorΘ m⌠₧u vznika¥ zo zle pou₧it²ch premenn²ch z ActionScriptu 1.0.

Programßtori v AS1.0 mali Φasto problΘmy pri debugovanφ svojich prßc (hlavne komplexn²ch projektov) a tieto boli sp⌠sobenΘ prßve t²m, ₧e stratili preh╛ad vo svojich premenn²ch. V ActionScripte 1.0 ste mohli deklarova¥ premenn·, priradi¥ jej textov· hodnotu a hne∩ nato jej priradi¥ Φφseln· hodnotu:

var mojeMeno = "Milan";
mojeMeno = 4;

V tomto jednoduchom prφpade je jasnΘ, ₧e chcete aby v premennej "mojeMeno" bolo vaÜe meno a nie nejakΘ Φφslo. PoΦas programovania sa Φasto stßva, ₧e premennej nie je pride╛ovanß priamo hodnota, ale je generovanß dynamicky. Tak₧e nie v₧dy viem jednoducho skontrolova¥, Φo bolo premennej priradenΘ, a preto vznikaj· chyby, ktorΘ sa musia pracne h╛ada¥.

V AS2.0 je to u₧ pekne vyrieÜenΘ. Ak deklarujete (definujete) nejak· premenn· urΦitΘho dßtovΘho typu a nßhodou sa k nej priradφ hodnota inΘho dßtovΘho typu, vygeneruje sa chyba, ktorß vßm povie, ₧e je priraden² dßtov² typ premennej nesedφ so zadefinovan²m dßtov²m typom. Tak₧e sa m⌠₧ete naozaj spo╛ahn·¥ na vaÜe premennΘ a to vßm u╛ahΦφ vela ·silia pri testovanφ vaÜich aplikßciφ.

Pri striktnom zadefinovanφ premennej musφte pou₧i¥ var keyword, nasledovanΘ menom premennej, dvojbodkou a dßtov²m typom. VÜetky dßtovΘ typy sa zaΦφnaj· na ve╛kΘ pφsmeno. V tomto prφklade definujem premenn· "mojeMeno" ako dßtov² typ String:

var mojeMeno:String;

Premenn· m⌠₧em zadefinova¥ a nesk⌠r jej potom priradi¥ hodnotu, alebo jej priradi¥ hodnotu hne∩ pri definovanφ:

var mojeMeno:String = "Milan";

Po zadefinovanφ premennej sa k nej pristupuje bez var keyword, bez dvojbodky, aj bez dßtovΘho typu, tak₧e ak chcem priradi¥ premennej in· hodnotu, pou₧ijem:

mojeMeno = "Jano";

Ak by som pou₧il nasleduj·ci k≤d, deklaroval by som nov· premenn· s rovnak²m menom, ktorß by nahradila predchßdzaj·cu, Φo som vlastne nechcel:

var mojeMeno = "Jano";

Pri pokuse priradi¥ premennej dßtovΘho typu String (teda text) in² dßtov² typ, naprφklad Φφslo, dostanem nasleduj·cu chybu v Output okne:

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 2: Type mismatch in assignment statement: found Number where String is required. sProduct = 8;

StriktnΘ definovanie premenn²ch je vÜak iba compile-time nßstroj. Znamenß to, ₧e sa typy premenn²ch kontroluj· len pri kompilßcii (exporte) swf, nie pri jeho chode. Akonßhle u₧ aplikßcia be₧φ, premenn²m m⌠₧e by¥ priradenß akßko╛vek hodnota, dßtov² typ sa u₧ nekontroluje.

Pozor vÜak na globßlne premennΘ, tie sa striktne definova¥ nedaj·. Nepou₧φva sa ani var keyword, staΦφ starΘ znßme _global:

_global.mojeMeno = "Milan";
var _global.mojeMeno = "Milan"; // vygeneruje chybu
_global.mojeMeno:String = "Milan"; // vygeneruje chybu

Strict Data Typing sa takisto vyu₧φva aj pri definovanφ funkciφ. KonkrΘtne sa definuj· dßtovΘ typy argumentov funkciφ a hodnota, ktor· funkcia vracia. Naprφklad tßto funkcia akceptuje ako argument meno dßtovΘho typu String a vracia hodnotu dßtovΘho typu Boolean (True alebo False):

function mojaFunkcia (meno:String) :Boolean {};

Ak funkcia neakceptuje ₧iadne argumenty a nevracia ₧iadnu hodnotu, pou₧ite "Void" ako dßtov² typ:

function mojaFunkcia (Void) :Void {};

Void jednoducho znamenß, ₧e funkcia nevy₧aduje ₧iadne argumenty a nevracia ₧iadnu hodnotu. Nie je to vÜak kontrolovanΘ pri kompilovanφ, tak₧e ak priradφte funkcii nejak² ten argument, prφjme ho a nevygeneruje sa ₧iadna chyba.

Pou₧φva¥ striktnΘ definovanie premenn²ch je u₧itoΦn² zvyk, hoci to nie je vy₧adovanΘ. V²hody u₧ poznßte. Ak pou₧φvate Strict Data Typing, musφte v "Publish Settings" vybra¥ ActionScrip 2.0, ale nemusφte publikova¥ len pre Flash Player 7, lebo, ako u₧ vieme, Flash umo₧≥uje s AS2.0 publikova¥ aj do Flash Player 6. Urobφte ale lepÜie, ak zaÜkrtnete polφΦko "Optimize for Flash Player 6 r65" pre lepÜiu optimalizßciu so starÜφm Flash Playerom.

Pozn. aut.: NiektorΘ Φasti Φlßnku som konzultoval cez email s Joey Lottom, ktor² napφsal v²bornΘ anglickΘ Φlßnky o AS2.0.

Zdroje a odkazy

Äigmond, Milan (14.1. 2004)