V dneÜnφm dφlu si ukß₧eme zm∞ny v ActionScriptu 2, kterΘ se vyskytly v novΘ verzi Macromedia Flash MX 2004. ActionScript 2 nynφ obsahuje vylepÜenou podporu OOP zejmΘna t°φd, rozhranφ, d∞diΦnosti a jin²ch OOP prvk∙. Nynφ si postupn∞ ukß₧eme jednotlivΘ zm∞ny v ActionScriptu2.
V ActionScriptu 2 mß nynφ ka₧dß prom∞nnß pevn∞ stanoven² datov² typ (Strong Typing) jako je tomu nap°φklad v ostatnφch jazycφch. Pokud tedy vytvo°φme prom∞nnou typu String a pokusφme se do nφ ulo₧it hodnotu typu Number, vyhodnotφ kompilßtor toto p°i°azenφ jako chybu. Vφce na p°φklad∞:
var Typ:String = "Peugeot"; Typ = 1; trace(Typ);
Zobrazφ chybovΘ hlßÜenφ:
**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 2: Type mismatch in assignment statement: found Number where String is required. Typ = 1; Total ActionScript Errors: 1 Reported Errors: 1
ChybovΘ hlßÜenφ nßm oznamuje, ₧e se pokouÜφme do prom∞nnΘ typu String p°i°adit hodnotu typu Number. Sprßvn∞ by m∞l p°φklad vypadat takto:
var Typ:String = "Peugeot"; Typ = "Audi"; trace(Typ);
Jak si m∙₧ete vÜimnout, tak se nßm p°i vytvß°enφ prom∞nn²ch zobrazφ kontextovΘ menu, kterΘ nßm pom∙₧e s v²b∞rem typu prom∞nnΘ, funkce atd.
Nynφ si ukß₧eme, jak deklarujeme funkce, jejich parametry a nßvratovΘ hodnoty. Pro ukßzku si vytvo°φme funkci.
function Vypocitej(a:Number, b:Number):String { return a / b; } trace(Vypocitej(10, 2));
Funkce op∞t vrßtφ chybovΘ hlßÜenφ:
**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 2: The expression returned must match the function's return type. return a / b; Total ActionScript Errors: 1 Reported Errors: 1
Jako nßvratovou hodnotu jsme nastavili datov² typ String, ovÜem sprßvn∞ mß b²t Number.
Oproti starÜφ verzi ActionScriptu musφme p°i vytvß°enφ t°φd v ActionScriptu 2 dodr₧et urΦitΘ postupy, bez kter²ch by t°φdy vytvß°et neÜlo. Jednß se p°edevÜφm o:
Nynφ si ukß₧eme jednoduchou t°φdu.
class cAuto { var Typ:String; function Info():String { return Typ; } } // Vytvo°φme instanci t°φdy var auto:cAuto = new cAuto(); auto.Typ = "Peugeot"; // Zobrazφme obsah prom∞nnΘ trace(auto.Info());
Nynφ ovÜem nastal okam₧ik, abychom definici naÜφ t°φdy p°esunuli do externφho .as souboru. Vytvo°φme tedy nov² ActionScript .as soubor, kter² pojmenujeme stejn∞ jako nßzev nßmi vytvo°enΘ t°φdy (cAuto.cs) pomocφ menu File -> New... -> ActionScript File.
M∙₧e se stßt, ₧e budeme chtφt strukturu t°φd trochu zorganizovat. M∙₧eme vyu₧φt mo₧nosti organizace do struktury podobnΘ Jmenn²m prostor∙m - Namespaces podobnΘ nap°φklad z jazyk∙ Java Φi C#. Tato organizace spoΦφvß ve vytvo°enφ adresß°ovΘ struktury podle definovanΘho nßzvu. Pokud tedy vytvo°φme t°φdu JosefNovak.Projekty.cAuto musφme ji ulo₧it do adresß°ovΘ struktury JosefNovak/Projekty/cAuto.as.
Flash takΘ obsahuje nastavenφ, kter²m m∙₧eme ovlivnit umφst∞nφ t°φd. Ve v²chozφm nastavenφ Flash nejprve prohledß adresß° Classes, kter² nalezneme v instalaΦnφm adresß°i a potΘ ve slo₧ce se samotn²m projektem. Vlastnφ adresß°e m∙₧eme p°idat nastavenφm pomocφ Edit -> Preferences ->ActionScript -> ActionScript 2.0 Settings.
Nynφ bude Flash vyhledßvat v adresß°ovΘ struktu°e "C:\Tridy".
Abychom nemuseli v₧dy p°i vytvß°enφ instance vypisovat celou cestu nap°φklad: "JosefNovak.Projekty.cAuto", m∙₧eme vyu₧φt klφΦovΘho slova import:
// Nßzev t°φdy import JosefNovak.Projekty.cAuto; // nebo takΘ pro import vÜech t°φd import JosefNovak.Projekty.* // Vytvo°φme instanci t°φdy var auto:cAuto = new cAuto(); auto.Typ = "Peugeot"; // Zobrazφme obsah prom∞nnΘ trace(auto.Info());
Pomocφ modifikßtor∙ Private a Public m∙₧eme ovlivnit viditelnost metod a prom∞nn²ch v t°φdßch. V minulΘ verzi ActionScriptu byly vÜechny prom∞nnΘ a funkce p°φstupnΘ zvenΦφ (Public), nynφ jejich viditelnost a prßci s nimi m∙₧eme ovlivnit pomocφ t∞chto modifikßtor∙.
Modifikßtorem Private nastavφme, ₧e p°φstup k funkci nebo prom∞nnΘ bude pouze uvnit° t°φdy. Modifikßtorem Public nastavφme p°φstup odkudkoliv.
class cAuto { private var Typ:String; function cAuto(typ:String) { Typ = typ; } public function Info():String { return Typ; } } // Vytvo°φme instanci t°φdy var auto:cAuto = new cAuto(); auto.Typ = "Peugeot"; // Zobrazφme obsah prom∞nnΘ trace(auto.Info());
Pokud bychom se tedy pokusili manipulovat s hodnotou prom∞nnΘ Typ, zobrazil by kompilßtor nßsledujφcφ hlßÜenφ:
**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 3: The member is private and cannot be accessed. auto.Typ = "Peugeot"; Total ActionScript Errors: 1 Reported Errors: 1
Sprßvn∞ by to tedy m∞lo vypadat nßsledovn∞:
// Vytvo°φme instanci t°φdy var auto:cAuto = new cAuto("Peugeot"); // Zobrazφme obsah prom∞nnΘ trace(auto.Info());
StatickΘ metody a prom∞nnΘ jsou takovΘ, kterΘ m∙₧eme zavolat bez vytvo°enφ instance objektu. Pro nastavenφ pou₧ijeme modifikßtor static.
class cAuto { static function Info():String { return "Typ auta"; } } // Zavolßme metodu trace(cAuto.Info());
Op∞t jako v jin²ch objektov∞ orientovan²ch jazycφch p°ichßzφ ActionScript 2 vlastnostmi. Vlastnosti odd∞lujφ a zp°ehled≥ujφ celkovΘ uspo°ßdßnφ t°φd. P°i zφskßvßnφ a nastavovßnφ hodnot vyu₧φvßme tzv. Getter a Setter metody.
Getter metoda nep°ebφrß ₧ßdn² parametr a umo₧≥uje zφskat hodnotu internφ prom∞nnΘ.
function get Typ():<< datov² typ >> { return << nßzev prom∞nnΘ >>; }
Setter metoda je opakem Getter metody a umo₧≥uje nastavit hodnotu prom∞nn²ch.
function set Typ(value:<< datov² typ >>):Void { << nßzev prom∞nnΘ >> = value; }
Nynφ si ukß₧eme vÜe pohromad∞:
class cAuto { private var _typ:String; public function get Typ():String { return _typ; } public function set Typ(hodnota:String):Void{ _typ = hodnota; } } // Vytvo°φme instanci t°φdy var auto:cAuto = new cAuto(); // Nastavφme hodnotu auto.Typ = "Peugeot"; // Zobrazφme obsah prom∞nnΘ trace(auto.Typ);
Pozn.: klφΦovΘ slovo Void znamenß, ₧e funkce nevracφ ₧ßdnou hodnotu.
Zßv∞r
Pro tento dφl to bude vÜe. V p°φÜtφm dφle budeme pokraΦovat v povφdßnφ v poznßvßnφ ActionScriptu 2 a novinkßm ve Flashi MX 2004.