Pošto Flash ima ograničenja u radu sa fajlovima i bazom podataka, da bi snimili ili učitali neki sadržaj sa interneta često je potrebno pozvati neki drugi programski jezik koji ima ugrađene i ove mogućnosti. Najpopularniji programski jezik koji se koristi za ovu namenu je ’PHP’ (Php Hypertext Preprocessor). Za razliku od Flash-a koji se izvršava na našem kompjuteru, php se izvršava na serveru, tako da je uz pomoć njega moguće raditi sa informacijama, koje se ne mogu nikako razotkriti – korisno za šifre.
Php je ’open-source software’ i besplatan je za upotrebu. Podržava rad sa bazama podataka raznih tipova: MySQL, Informix, Oracle, Sybase, Solid, PostgreSQL, Generic ODBC i druge. Jedan je od najrasprostranjenih programskih jezika za rad na serverima, i podržavaju ga skoro svi serveri. Da bi ostvarili komunikaciju sa php-om potrebno je osnovno znanje o ovom jeziku. Veoma dobra objašnjenja o tome kako programirati u programskom jeziku php se mogu naći na sajtu: http://www.w3schools.com/php/ gde se mogu naći objašnjenja i za druge programske jezike.
Povezivanje Flash-a i php-a nije komplikovano, ali postoje određena pravila koja se moraju poštovati. Postoji dva načina povezivanja sa programom na serveru koji radi u php-u – jednosmerna komunikacija i dvosmerna komunikacija.
1) Jednosmerna komunikacija
Kao i osnovni sadržaj koji se nalazi na nekoj adresi na internetu, Flash može da startuje i neki php fajl na internetu u svom ili u novom prozoru.
Na primer na adresi https://www.maher.rs/Examples/Php/Example_1.php se nalazi najprostiji program u php-u sa sledećim kodom:
<?php
$UserName = $_GET[“UserName”];
echo “Hi ” . $UserName . ” …”;
?>;
Ovaj kod se poziva iz AS3.0 na sledeći način:
import flash.net.*;
var InternetPath:String = “https://www.maher.rs/Examples/Php/Example_1.php”;
var UrlRequest:URLRequest = new URLRequest(InternetPath);
navigateToURL(UrlRequest, “_blank”);
U ovom primeru u istom prozoru u pregledaču interneta koji koristimo se startuje program sa date putanje. Pošto nismo poslali podatak ‘UserName’ php štampa izlaz: ‘Hi …’.
Naredba ‘navigateToUrl’ može da ima i drugi parameter koji određuje gde se izvršava navedeni php.
navigateToURL(UrlRequest, “_blank”);
Moguće opcije drugog parametra su: “_blank”, “_top”, “_parent” i “_self” (novi prozor, glavni prozor, prozor – roditelj i svoj prozor).
Osnovni model jednosmerne komunikacije sa slanjem podataka je sledeći:
import flash.net.*;
var InternetPath:String = “https://www.maher.rs/Examples/Php/Example_1.php”;
var Variables:URLVariables = new URLVariables();
Variables.UserName = “YourName”;
Variables.Password = “Password”;
var UrlRequest:URLRequest = new URLRequest(InternetPath);
Metoda za slanje podataka u ovom slučaju je ‘GET’.
Na ovaj način Flash šalje podatke UserName i Password, koje php može da iskoristi za izvršavanje nekog zadatka – na primer kontrole prijavljivanja. Sada bi php ispisao na enranu: ‘Hi YourName …’.
Međutim ako želimo da dobijemo povratne informacije u isti Flash program, moramo se poslužiti predviđenim naredbama za to.
Iz ovog primera može da se zaključi da AS3.0 šalje podatke UserName i Password, a php vraća podatke Answer i Message. Razlika od prvog postupka je u tome da se php program izvršava na serveru, bez da se otvara negde u nekom prozoru, a vraća podatke u AS3.0 u standardizovanim parovima: ime_1=vrednost_1&ime_2=vrednost_2… Zbog ovog standarda ne smete da koristite u povratnim informacijama znakove ‘&’ i ‘=’, sem za njihovu namenu.
Kada imate potrebu za bilo kojim izvršavanjem programa u php-u, obavezno koristite povratne informacije da bi znali da li je program u php-u izvršen.
FLASH MAHER – OPP – OBJEKTNO ORIJENTISANO PROGRAMIRANJE
Adobe Flash Professional ima predviđene mogućnosti objektno orijentisanog programiranja koje se odnose i na dizajn (često se naziva objektno orijentisani dizajn) i na kodiranje – programiranje. OOP u AS3.0 nam olakšava kodiranje u AS3.0, jer se uz pomoć OOP stvaraju pregledniji i razumljiviji kodovi, koje je lakše moguće ispravljati i ponovo koristiti. OOP podrazumeva organizovanje programa u objekte – pakete koda koji mogu da imaju svoje podatke, svojstva, metode i događaje. Praćenje i korišćenje svakog paketa je lakše uz OOP pomoću jednog podatka – instance (kojoj je dodeljen taj paket) pomoću koje je moguće pratiti i menjati sve ono što je vezano za taj paket.
Uobičajeni zadaci koje treba poznavati u OOP su definisanje klasa i definisanje svojstava i metoda – funkcija. Njihovo korišćenje nakon pravilnog definisanja je lako.
Pri OOP se stalno koristi reč klasa (class) koja predstavlja jedan objekat koji ima definisanu strukturu – kod i definisano ponašanje. Klase mogu biti hijerarhiski organizovane, t.j. jedna klasa može da nasleđuje funkcionalnost iz druge. Atributi klasa su karakteristike koje najčešće ukazuju na privatnost svojstava i metoda klasa. Kao i kod simbola, za korišćenje klasa se koriste instance, koje moraju da imaju svoja jedinstvena imena. Klasa (njen kod) se piše u okviru posebnog fajla sa ’.as’ ekstenzijom, a ne u okviru glavnog fajla sa ’.fla’ ekstenzijom. Sastoji se iz ključnog imena ’class’ nakon koga sledi jedinstveno ime klase i na kraju u okviru velikih zagrada ’{ /*code*/ }’ telo klase. To izgleda ovako:
class MyFirstClass {
trace(“Hello!”);
}
AS3.0 Vam dozvoljava da izaberete glavne atribute klase i to:
– internal (klasa vidljiva u okviru sopstvenog paketa – osnovna vrednost)
– public (klasa vidljiva svuda)
– dinamic (klasa koju je moguće menjati programski)
– final (klasa ne moža da bude izvršena iz drugih klasa)
ActionScript fajl ’.as’ mora da ima jednu javno vidljivu definiciju klase označenu sa ’public class’, koja se piše u okviru paketa koji sadrži ključnu reč ’package’ i telo u okviru velikih zagrada ’{ }’. Osnovni izgled bi bio sledeći:
package {
public class MyFirstClass {
trace(“Hello!”);
}
}
Da bi ovaj paket funkcionisao potrebno je da se snimi u istom folderu u kome je i ’.fla’ fajl sa jedinstvenim imenom paketa ’MyFirstClass.as’ u ovom slučaju. Da bi pozvali ovaj paket iz glavnog ’.fla’ fajla potrebno je da u njemu unesete kod za uvoženje ovog paketa (import MyFirstClass;) i da formirate jednu instancu kao klasu:
var MyInstance: MyFirstClass = new MyFirstClass();
Postupak je sličan kreiranju bilo kog podatka ili funkcije:
var MyTraceFunction:Function = function () { trace(“Hi!”); }
To se zajedno kodira na sledći način:
import MyFirstClass;
var MyInstance:MyFirstClass = new MyFirstClass();
AS3.0 Vam dozvoljava da u okviru jednog paketa imate više klasa, koje su vidljive klasama iz ovog paketa, dok je samo glavna klasa ’public’ vidljiva svuda.
package {
public class MyFirstClass {
trace(“Hello!”);
var MySecondInstance:MySecondClass = new MySecondClass()č
}
}
class MySecondClass {
trace(“Hi again!”);
var MyThirdInstance:MyThirdClass = new MyThirdClass();
}
class MyThirdClass {
trace(“Hi, hi, hi!”);
}
Dinamičke klase dopuštaju da im se dodaju programski nove osobine.
package {
public dynamic class MyFirstClass {
trace(“Hello!”);
}
}
Novi ’.fla’ kod:
import MyFirstClass;
var MyInstance:MyFirstClass = new MyFirstClass();
MyInstance.NewValue = “Working…”;
trace(MyInstance.NewValue);
Atributi podataka, svojstava i metoda klase mogu biti:
– internal (osnovna vrednost – vidljivo u okviru paketa)
– private (vidljivo samo u okviru klase)
– public (vidljivo svuda)
– protected (vidljivo samo u okviru iste klase i izvedenih klasa)
– static (navodi pripadnost klasi)
– UserDefinedNamespace (prilagođeno ime koje definiše korisnik)
Možemo definisati podatke:
public var VisibleValue:String = “Use from .as & .fla file.”;
private var PackageValue:String = “Use only from .as file.”;
Slično kao i podaci i metode ili funkcije klase mogu biti:
– internal (osnovna vrednost – vidljivo u okviru paketa)
– private (vidljivo samo u okviru klase)
– public (vidljivo svuda)
– protected (vidljivo samo u okviru iste klase i izvedenih klasa)
– static (navodi pripadnost klasi)
– UserDefinedNamespace (prilagođeno ime koje definiše korisnik)
Kao i ranije funkcije u okviru klase mogu biti definisane na dva načina:
1) public function Example() { /* code */ }
2) public var Example:Function = function () { /* code */ }
Isto važi i za ulazne i izlazne vrednosti funkcija.
AS3.0 dopušta ne samo zamenu javnih vrednosti podataka klasama, već i zamenu metoda – funkcija uz pomoć naredbe ’override’. U sledećem primeru je objašnjeno izračunavanje površine objekta preko klase ’Answer’, s tim da se navodi kojoj klasi objekt pripada ’Square’ ili ’Circle’. Kada se navede kojoj klasi objekt pripada, odgovarajuća klasa menja funkciju klase ’Answer’.
OverrideExample.fla
import Answer;
import Circle;
import Square;
var Object_1:Circle = new Circle();
trace(Object_1.Value(5)); // 78.53981633974483
var Object_2:Square = new Square();
trace(Object_2.Value(5)); // 25
Answer.as
package {
public class Answer {
public function Value(InputValue:Number):Number {
return NaN;
}
}
}
Circle.as
package {
import Answer;
public class Circle extends Answer {
override public function Value(Radius:Number):Number {
return (Radius * Radius * Math.PI);
}
}
}
Square.as
package {
import Answer;
public class Square extends Answer {
override public function Value(Length:Number):Number {
return (Length * Length);
}
}
}
Kada se vidi ovaj primer sve izgleda tako prosto, ali retko ko uspe da oformi izvršenje ovih skripti, jer su na internetu mnoge informacije nepotpuno objašnjene.
U slučaju da imate više ’.as’ skripti i da želite da ih organizujete u foldere, možete i to da uradite uz navođenje putanje ’.fla’ fajlu gde se nalazi željeni ’.as’ fajl. Putanja se ne odvaja pomoću ’/’ već pomoću ’.’ i navodi se na sledeći način:
import Folder_1.Folder_2.Folder_3.File_2;
import Folder_1. File_1;
Odgovarajući paketi ’File_1.as’ i ’File_2.as’ moraju imati u sebi istovetne putanje iza ključne reči ’package’.
File_1.as
package Folder_1 { /* */ }
File_2.as
package Folder_1.Folder_2.Folder_3 { /* */ }
Moguće je i importovanje svih ’.as’ fajlova iz jednog direktorijuma, ako se napiše kod na sledeći način:
Da prvo odgovorimo na pitanje šta je to animacija? Animacija bi u prevodu mogla značiti kretanje, davanje života – oživljavanje statičnih slika. Naš cilj je da promenom statičkih slika učinimo da izgleda da se likovi kreću – menjaju kao da su živi. Što smo mi više spretniji to animirano kretanje izgleda realnije. Ne moraju objekti da se kreću da bi postigli željeni efekat. Oni mogu da menjaju oblik, izgled, boju ili neko drugo svojstvo, da bi se postigao odgovarajući cilj. Još dok nije postojao ni TV, veoma uspešno su animirani pokreti crtanjem pojedinačnih listova, i brzim promenama istih je nastajala iluzija kretanja. Animacija se i na TV-u izvršava na sličan način, a naše oko ne stiže da vidi promene statičnih slika, već nam se čini da je sve živo.
Flash ima definisanu pozornicu ‘stage‘ preko koje se prikazuju frejmovi koji nam omogućavaju da stvaramo animacije. Frejmovi (Frames)bi predstavljali slike, koje možemo da kreiramo predviđenim opcijama za dizajniranje iz Flash-a, a možemo i da im menjamo sadržaj koristeći AS3.0. Kao u prethodno navedenom primeru, frejmovi se smenjuju jedan za drugim, a mi imamo kontrolu kojom brzinom se to izvodi i kojim redosledom se prikazuju frejmovi. Ne moraju se frejmovi smenjivati po redu kao što su prikazani na vremenskoj liniji. Uz pomoć AS3.0 Flash nam daje mogućnost da izaberemo koji će sledeći frejm po redu biti prikazan. I ne samo jedan frejm! Vremenska linija (TimeLine) nam omogućava da stvaramo animaciju u više slojeva (Leyers), a u okviru svakog sloja se nalaze frejmovi. To znači da se u istom trenutku prikazuje frejm pod izabranim rednim brojem sa svakog sloja. Svaki frejm ima svoj prioritet za prikaz, i uvek se prikazuju frejmovi jedan ispred drugog po prioritetu, čime može da se veoma lako stvori utisak bližih i daljih obrjekata. Moguće je i da se na jednom istom frejmu duže zadrži po želji, jer se u AS3.0 često koriste i naredbe za crtanje u 2 i 3 dimenzije, pomoću kojih je moguće stvoriti realne animacije.
Istraživanjem je određeno da ljudi posmatrajući ekran već preko 24 frejmova prikazanih u sekundi imaju osećaj da su animacije stvarne, i ne primećuju da se slike menjaju po slajdovima. Što je veći broj frejmova promenjen u sekundi, animacije izgledaju prirodnije, ali obratite pažnju na to da kompjuteri imaju procesore sa limitiranom brzinom, tako da u zavisnosti od složenosti programa, može da dođe do preskakanja nekih delova slike i treperenja. Zato obratite pažnju na izbor brzine menjanja frejmova, a preporuka je da to bude od 12 – 30 po sekundi.
Simboli, instance, svojstva i metode!
Simbol može biti bilo koji objekt, grafika ili dugme ili bolo koja kombinacija. Pri konvertovanju nekog objekta u simbol biramo tip simbola (Movie Clip – film, Button – dugme ili Graphics – grafika), u zavisnosti od zahteva koji treba da izvrši. Da bi simbol bio upotrebljiv u kodu moramo da mu dodelimo ne samo ime nego i klasu koja se koristi u AS3.0, a to se radi tako što uključimo naprednu opciju ’Advanced’, selektujemo ’Export for ActionScript’ i izaberemo i jedinstveno ime klase u polju ’Class’. Bilo koji objekat kada pretvarimo u simbol, pojavljuje se u biblioteci simbola koja se vidi u prozoru ’LIBRARY’. Simbole kreiramo ručno ili kopiramo iz drugih ’fla’ fajlova, a mogu biti i kompajlirani drugim ’fla’ fajlom, pa da samo navedemo putanju do njih na predviđeno mesto. Imaju mogućnosti i animacije i kodiranja kao i glavni ’fla’ fajl. Njihova moć je velika, i veoma je važno razumeti minimum osnovni deo mogućnosti koje nam pružaju.
Njihove kopije kojima se služimo pri programiranju i koje se prikazuju kada se reprodukuje sadržaj kroz Flash Player se nazivaju ’Instance’. Jedan simbol može da ima više aktivnih kopija – instanci.
Svaka instanca ima svoja svojstva – osobine ili karakteristike, a može da ima i metode – akcije koje izvršava. Svaka instanca ima svoje jedinstveno ime, a u prozoru ’PROPERTIES’ su prikazane njene osobine, koje mogu biti različite zavisno od tipa simbola čija je kopija data instanca. Važno je razumeti da možemo da menjamo izgled i osobine svake instance posebno, i time ne utičemo na glavni simbol, a da kada menjamo osobine i izgled simbola, utičemo na sve instance – kopije tog simbola. Svojstva instanci se definišu i menjaju tako što se između imena instance i svojstva stavlja tačka ’.’ koja služi kao separator i pomaže AS3.0 da definiše mapu ili putanju da bi se data komanda izvršila.
Specijalna osbina AS3.0 je to da svojstva objekata ne moraju da budu samo podaci, već mogu da budu i funkcije ili drugi objekti. Ovo je specifičnost objektno orijentisanog programiranja. AS3.0 kod može da odradi poslove višeg nivoa od običnih programskih jezika.
Metode su instrukcije koje ukazuju da nešto treba da se uradi. Oni obično zahtevaju parametre u okviru malih zagrada, koji dodatno definišu pravila za izvršavanje metoda.
Maska je samo jedna od osobina koje su veoma dobro urađene programom Adobe Flash Professional. Masku je moguće uraditi i iz vremenske linije promenom osobine lejera u ’Mask’ i uz pomoć kodiranja. Prva metoda sa dodatkom OOP loadera i kodiranog simbola je prikazana u narednom primeru. Linkovi slika koje se smenjuju su zapisani u ’XML’ fajlu. Takođe su u njemu podaci i o brzini izbleđivanja slike, koeficijentu izbleđivanja slika i dužini trajanja pauze do zamene postojeće slike novom. U ovom primeru se vidi da sem linkova, skoro sve što treba da se podesi možemo da definišemo u ’XML’ bazi, i na taj način olakšamo testiranje programa pri raznim vrednostima podataka.
Primer:
import flash.geom.*;
import flash.filters.*;
import flash.display.*;
import flash.events.*;
import flash.text.*;
import flash.net.*;
import PictureLoader;
var Photos:Array = new Array();
Photos[0] = new MovieClip();
var Text:TextField = new TextField();
Text.width = Text.height = 250;
Text.background = Text.selectable = false;
Text.wordWrap = true;
var FontTextFormat:TextFormat = new TextFormat(“Georgia”, 42, 0xffff00, true, false, false, null, null, “center”);
Text.defaultTextFormat = FontTextFormat;
var FilterShadow:DropShadowFilter = new DropShadowFilter();
var FilterGlow:GlowFilter = new GlowFilter(0x333333, 0.7, 10, 10);
Kao kod simbola ’MainMask’, svaki simbol može da ima svoj kod. Može da se koristi i animacija i kodiranje svakog simbola posebno, a moguća je i komunikacija između skripti koje su pisane u simbolima, tako da su mogućnosti koje AS3.0 nudi sa simbolima izvanredne.
Drugi primer uz korišćenje samo AS3.0 koda:
import flash.geom.*;
import flash.display.*;
import flash.events.*;
import flash.net.*;
import PictureLoader;
var Photos:MovieClip = new MovieClip();
var PhotosLoader:PictureLoader = new PictureLoader(Photos, “Picture1.jpg”);
Klasa Graphics sadrži skup metoda pomoću kojih možete formirati složene vektorske oblike. Pomoću AS3.0 koda moguće je napraviti dinamičke animacije koje drugi programski jezici ne podržavaju.
Osnovne metode klase Graphics su:
beginBitmapFill(bitmap:BitmapData, matrix:Matrix = null, repeat:Boolean = true, smooth:Boolean = false):void
Ispunjava oblast za crtanje Bitmap slikom.
beginFill(color:uint, alpha:Number = 1.0):void
Selektuje boju i providnost pri crtanju.
beginGradientFill(type:String, colors:Array, alphas:Array, ratios:Array, matrix:Matrix = null, spreadMethod:String = “pad”, interpolationMethod:String = “rgb”, focalPointRatio:Number = 0):void
Formira gradijent (prelaz) ispune koji se koristi pri crtanju.
drawCircle(x:Number, y:Number, radius:Number):void
Iscrtava krug oko definisanog centra sa datim poluprečnikom.
drawEllipse(x:Number, y:Number, width:Number, height:Number):void
Iscrtava elipsu od gornjeg levog ugla definisanog sa ’x’ i ’y’ sa poluprečnicima osa ’width’ i ’height’.
drawGraphicsData(graphicsData:Vector.):void
Pridružuje seriju ’IgraphicsData’ instaci komandi za crtanje.
drawPath(commands:Vector., data:Vector., winding:String = “evenOdd”):void
Pridružuje seriju komandi za crtanje.
drawTriangles(vertices:Vector., indices:Vector. = null, uvtData:Vector. = null, culling:String = “none”):void
Iscrtava niz trouglova dajući im trodimenzionalni izgled.
endFill():void
Zatvara otvorene grafičke metode.
lineBitmapStyle(bitmap:BitmapData, matrix:Matrix = null, repeat:Boolean = true, smooth:Boolean = false):void
Definiše bitmapu koja se koristi za iscrtavanje linija.
lineGradientStyle(type:String, colors:Array, alphas:Array, ratios:Array, matrix:Matrix = null, spreadMethod:String = “pad”, interpolationMethod:String = “rgb”, focalPointRatio:Number = 0):void
Definiše vrstu linije kojom se iscrtava.
lineShaderStyle(shader:Shader, matrix:Matrix = null):void
Specifikuje metodu Shader pri iscrtavanju linija.
lineStyle(thickness:Number = NaN, color:uint = 0, alpha:Number = 1.0, pixelHinting:Boolean = false, scaleMode:String = “normal”, caps:String = null, joints:String = null, miterLimit:Number = 3):void
Definiše stil linije za iscrtavanje.
lineTo(x:Number, y:Number):void
Iscrtava liniju od trenutne pozicije do definisane tačke (x, y).
moveTo(x:Number, y:Number):void
Pomera trenutnu poziciju za crtanje u tačku (x, y).
U narednim primerima je prikazano osnovno kodiranje za iscrtavanje većine grafičkih elemenata koje AS3.0 podržava. U ’Help’-u su detaljnije objašnjena svojsva svake metode. Treba obratiti pažnju na to da AS3.0 iscrtava novu grafiku uvek preko svih grafika, tako da ako želimo da stvorimo efekt bližih i daljih objekata, potrebno je da kreiramo više instanci tipa ’MovieClip’ ili drugih koji podržavaju grafičke metode, a nakon toga iskoristimo naredbu ’addChild’ ili ’addChildAt’ za definisanje njihovih prioriteta pri prikazivanju.
U narednom primeru prikazane su metode za iscrtavanje linija:
Obavezno posle izvršenih komandi za crtanje upotrebite ’graphics.endFill();’ jer bez ove metode dolazi do kočenja programa kada se crtanje programski ponavlja više puta.
Adobe stalno dodaje nove komande, tako da ako imate najnoviju verziju programa Adobe Flash Professional, moguće je da postoje neke naredbe koje ovde nisu spomenute.
Adobe Flash Professional ima razne filtere koje možemo da iskoristimo da bi poboljšali izgled teksta, statičnih slika ili animacija. Filteri mogu da se primene na bilo koji objekat ili instancu. Mogu da se aktiviraju iz prozora PROPERTIES/FILTERS, ili pomoću AS3.0 koda. Spisak filtera koji su dostupni je sledeći:
Neke filtere je moguće aktivirati dizajniranjem bez programiranja, dok se neki mogu aktivirati samo kodiranjem. Pored naziva filtera u malim zagradama su prikazani nazivi klasa kojima filteri pripadaju.
1. Bevel filter bi mogao da se shvati kao dodavanje efekta kosina objektu, tako da može da se iskoristi za stvaranje efekta trodimenzionalnog izgleda. Klasa BevelFilter ima sledeća svojstva:
U opisu klase su navedena svojstva koja mogu da se podese programski zajedno ili pojedinačno. To su: razdaljina filtera, ugao, prva boja, providnost prve boje, druga boja, providnost druge boje, zamućenje po ‘x’, zamućenje po ‘y’, jačina filtera, kvalitet filtera, tip filtera i nokaut filtera. Pojedinačno definisanje svojstava filtera se radi na sledeći način:
import flash.filters.BevelFilter; var Bevel:BevelFilter = new BevelFilter(); Bevel.distance = 20; Bevel.type = “outer”; BevelInstance.filters = [Bevel];
U primeru su programski definisani kvadrati kao instance klase ‘Sprite’ u niz ‘Square’, na kojima se aktiviraju filteri. Square[0] je osnovni kvadrat bez primene filtera, dok se ostali indeksi niza instanci ‘Square’ poklapaju sa rednim brojem filtera.
var Bevel:BevelFilter = new BevelFilter(5, 45, 0xffffcc, 1, 0x000000, 1, 5, 10, 1, 3, “inner”, false);
/* Bevel.distance = 20;
Bevel.type = “outer”; */
Square[1].filters = [Bevel];
Ovim filterom mogu da se izaberu dve boje – jedna sa jedne, a druga sa druge strane objekta, pomoću kojih može da se stvori iluzija da je sa jedne strane objekt osvetljen, a da se sa druge strane pojavljuje tamna oblast.
2. Blur filter je filter pomoću koga se objekti zamagljuju, uz čiju pomoć može da se dobile efekat kao da se posmatra kroz polumatirano staklo. Zamagljenjem objekata može da se stvori iluzija blizine i daljine objekta. Klasa BlurFilter ima sledeća svojstva:
Nastavak prethodnog koda sa dodatkom Blur filtera sledećem elementu bi bio:
var Blur:BlurFilter = new BlurFilter(10, 10, 1);
Square[2].filters = [Blur];
3. Drop shadow filter je filter koji dodaje senku objektima. Senke stvaraju iluziju da postoji izvor svetlosti koji ih stvara, a mi imamo mogućnost da kroz svojstva filtera podesimo intenzitet senke, poziciju, boju… Klasa DropShadowFilter ima sledeća svojstva:
var Glow:GlowFilter = new GlowFilter(0xffff00, 1, 10, 20, 2, 3, false, false);
Square[4].filters = [Glow];
5. Gradient bevel filter fukcioniše kao i Bevel filter s tim da možete da primenite gradijent (prelaz) boja, umesto po jedne boje predviđene Bevel filterom. Boje, vidljivosti i raspored boja su zapisani u nizovima (treba da budu svi iste dužine) koji nisu ograničeni brojem članova. Ako želite možete da napravite prelaz i od 10 ili više boja. Klasa GradientBevelFilter ima sledeća svojstva:
6. Gradient glow filter takođe slično funkcioniše kao običan Glow filter s tim da možete da primenite gradijent (prelaz) boja. GradientGlowFilter klasa ima sledeća svojstva:
7. Color matrix filter Vam dopušta da primenite matricu transformacije dimenzija 4×5 na RGBA (RedGreenBlueAlpha) vrednosti svakog piksela ulazne slike da bi proizveli nov set RGBA vrednosti. ColorMatrixFilter klasa ima samo svojstvo matrice:
function ApplyFilter(Child:DisplayObject, MyMatrix:Array):void {
var ColorFilter:ColorMatrixFilter = new ColorMatrixFilter(MyMatrix);
Child.filters = [ColorFilter];
}
function IOErrorHandler(event:IOErrorEvent):void {
trace(“Unable to load image…”);
}
8. Convolution filter primenjuje matricu konvolucije za proizvođenje specijalnog spiralnog efekta.Filter kombinuje piksele u ulaznoj slici sa susednim pikselima i na taj način stvara novi izgled. ConvolutionFilter klasa ima sledeća svojstva:
var Convolution:ConvolutionFilter = new ConvolutionFilter();
Convolution.matrixX = 3;
Convolution.matrixY = 3;
Convolution.matrix = ConvolutionMatrix;
Convolution.divisor = 1;
ImageLoader.filters = [Convolution];
}
9. Displacement map filter koristi vrednosti piksela iz specificiranog BitmapData objekta da bi izvršio promenu izgleda objekta. DisplacementMapFilter klasa ima sledeća svojstva:
DisField.text = “Text example with the displacement map”;
DisField.y = 90;
DisField.width = Size;
DisplacementMovie.addChild(DisField);
var DisFilter:BitmapFilter = GetBitmapFilter();
DisplacementMovie.filters = new Array(DisFilter);
function GetBitmapFilter():BitmapFilter {
return new DisplacementMapFilter(CreateBitMapData(), new Point(0, 0), BitmapDataChannel.RED, BitmapDataChannel.BLUE, 1, -50, DisplacementMapFilterMode.CLAMP, 0, 1);
}
function CreateBitMapData():BitmapData {
var BitMapData:BitmapData = new BitmapData(Size, Size, true, BgColor);
BitMapData.draw(DisplacementMovie, new Matrix());
var BitMap:Bitmap = new Bitmap(BitMapData);
BitMap.x = Size;
DisplacementMovie.addChild(BitMap);
return BitMapData;
}
10. Shader filter je po meni najmoćniji filter od svih filtera, ali i najteži za upotrebu. On može da menja osnovnu sliku na mnogo načina koristeći kao osnovno svojstvo klasu Shader.
ShaderFilter(shader:Shader = null)
Instanca Shader klase se formira dodatnim programiranjem pomoću programa Adobe Pixel Bender. Ovaj softver ima svoj specijalni kernal jezik, sličan programskom jeziku ’C’, sa malim brojem naredbi, koje nije teško naučiti. Korišćenje Pixel Bender-a je strogo licencirano, tako da su objašnjenja koja se odnose na upotrebu ovog filtera ukljonjena.
Sve filtere je moguće kombinovati, t.j. moguće je da se koristi jedan ili više filtera istovremeno na isti objekt.
Za savladavanje događaja najpre se moraju znati funkcije. AS3.0 nam nudi programiranje funkcija koje se izvršavaju klasičnim pozivanjem i funkcija koje se izvršavaju kada se desi neki događaj. Događaji su osnova formiranja dinamičkog sadržaja. U zavisnosti od toga šta se desi – pritisak na neko slovo tastature, klik mišem i slično, programiraju se odgovarajuće akcije. Najviše su u upotrebi događaji koji se izvršavaju posle određenog vremena (TimerEvent), događaji izazvani tastaturom (KeyboardEvent), i događaji izazvani mišem (MouseEvent). Za njihovo korišćenje potrebno je da programu damo informaciju da prati – sluša kada se desi događaj, i kada se to desi da izvrši predviđenu akciju – funkciju. Svako kodiranje događaja ima sličan postupak, ali svaki događaj ima svoj kod gde je opisan tip događaja, tip osluškivanja i ime funkcije koja se izvršava kada se događaj desi.
Događaj koji se izvršava posle određenog vremena je najviše u upotrebi. U narednom primeru koristimo pomeranje kruga na svakih 30 ms za 2 piksela levo ili desno.
Kada u radu treba da prekinemo izvršavanje bilo kog događaja, kao što smo ga uključili, potrebno je i da ga isključimo. Naredba za to je ’removeEventListener’, koja se koristi isto kao i ’addEventListener’. Za ’TimerEvent’ je poželjno upotrebiti i ’NewTimer.stop()’ za zaustavljanje tajmera iz gornjeg primera.
Primer 3: Analogni i digitalni sat!
import flash.text.TextField;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.display.MovieClip;
import flash.filters.GlowFilter;
import flash.filters.DropShadowFilter;
import flash.text.TextFormat;
var Now:Date;
var NewTextFormat:TextFormat = new TextFormat(“courier”, 20, 0x000000, true, false, false, null, null, “center”);
var Glow:GlowFilter = new GlowFilter(0x000000, 0.5, 10, 10);
var Shadow:DropShadowFilter = new DropShadowFilter(5, 45, 0x000000, 0.7);
var DigitalClock:TextField = new TextField();
DigitalClock.width = 550;
DigitalClock.defaultTextFormat = NewTextFormat;
DigitalClock.filters = [Glow];
stage.addChild(DigitalClock);
var AnalogClok:MovieClip = new MovieClip();
for(var Id:int = 0; Id < 24; Id ++) {
AnalogClok.graphics.lineStyle(2, 0x000000, 1);
var BodyMatrix:Matrix = new Matrix(1, 0, 0, 1, 0, 0);
Događaji vezani za tastaturu mogu pratiti pritisak tastera i otpuštanje testera. Kada se desi ovakav događaj, Flash šalje informaciju u kojoj su podaci o tome koji je taster u pitanju, funkciji koja je navedena.
U ovom primeru je pokazano lako razumljivo kodiranje za pamćenje svakog tastera posebno, i to je iskorišćeno za koso pomeranje objekta.
Primer klika levim tasterom miša na ’stage’ je najprostiji za shvatanje korišćenja događaja. Informacije koje se ovde šalju su i pozicija miša na objektu preko koga je kliknuto.
Ovo je očigledan primer kako se izvršavaju događaji. Kada ponovo kliknete na ’stage’ funkcija će se ponovo izvršiti. Ako želite da se ne izvršava ponovo potrebno je isključiti osluškivač, kao u sledećim linijama.
Događaji koje inicira miš su mnogobrojni. Moguć je klik mišem ’CLICK’ na neki objekt, pritisak dugmeta ’MOUSE_DOWN’, otpuštanje dugmeta ’MOUSE_UP’, pomeranje miša ’MOUSE_MOVE’, rotiranje točkića ’MOUSE_WHELL’ preko objekta, dolazak kursora preko objekta ’MOUSE_OVER’ i ’ROLL_OVER’, izlazak kursora van objekta ’MOUSE_OUT’ i ’ROLL_OUT’, i dvostruki klik mišem preko objekta ’DOUBLE_CLICK’. Na primeru se vidi kako se koriste neki od događaja, čija se izvršne funkcije odnose na menjanje izgleda kruga. Pored ovih moguće je kontrolisati i klik na centralni i desni taster miša.
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.filters.DropShadowFilter;
var CurrentColor:uint = 0x000000;
var CurrentSize:int = 100;
var Shadow:DropShadowFilter = new DropShadowFilter(10, 45, 0x888888, 0.5);
AnswerTextField.appendText(“Bravo!\nYou have found my number…”);
StaticTextField.text = “Click on stage to play again…”;
stage.addEventListener(MouseEvent.CLICK, Start);
}
else {
if(int(InputTextField.text) < MyNumber) {
AnswerTextField.appendText(“My number is greater than ” + InputTextField.text + “\nTry again…”);
}
else {
AnswerTextField.appendText(“My number is less than ” + InputTextField.text + “\nTry again…”);
}
}
}
Zapamtite da kada radite bilo koji program, kada završite sa nekim događajem obavezno isključite njegov osluškivač. Ako ovo zaboravite mogu nastati greške koje se obično javljaju kada se isti delovi programa pozivaju više puta.
U ovom primeru je ostvaren naizmenični transfer informacija između korisnika i programa, što vezuje korisnika da posveti neko vreme ovom programu. Međutim dizajn je veoma loš, tako da ako želimo da ukrasimo naše animacije, potrebno je da savladamo filtere i rad sa simbolima za početak.
Pri pisanju velikog koda došlo je do potrebe – ideje, da se zamene isti ili slični delovi koda koji se ponavljaju više puta, jednim delom koda (prilagodljivim po potrebi) koji može da se poziva više puta, radi lakšeg snalaženja, razumevanja i preglednosti. Sa ovim ciljem stvorene su funkcije koje predstavljaju blokove koda. Organizovane su u zasebne celine, sa ciljem da se više puta izvrše određeni zadaci. Svaka funkcija ima svoje jedinstveno ime, i može da se poziva više puta kad god je potrebno.
AS3.0 ima veliki broj formiranih funkcija koje možemo pozivati. Njihov kod nije prikazan kao ni kod bilo koje ugrađene osobine koju Flash nudi.
Globalne funkcije u AS3.0 su: Array, Boolean, decodeURI (Uniform Resource Identifier), decodeURIComponent, encodeURI, encodeURIComponent, escape, int, isFinite, isNaN, isXMLName, Number, Object, parseFloat, parseInt, String, trace, uint, unescape, Vector, XML i XMLList.
Najprostiji način pozivanja funkcije:
trace(„Hi!“);
AS3.0 nam naravno dopušta da kreiramo kodom sopstvene funkcije. Postoji dva načina definisanja funkcija.
1) Nakon ključne reči ’function’ navodimo jedinstveno ime funkcije. Iza imena funkcije se nalazi obavezno par malih zagrada ( ), između kojih mogu, a ne moraju da se nalaze ulazni podaci ove funkcije odvojeni zarezima. Nakon malih zagrada može a ne mora da stoji dodatak (označava povratnu informaciju iz funkcije) koji se odvaja znakom ’:’. Nakon ovakvog formiranja karakteristika funkcije, u okviru velikih zagrada { } se piše blok koda koji se izvršava kada se pozove funckija. AS3.0 ne izvršava funkcije dok se ne pozovu iz koda, tako da kodovi funkcija mogu da se nađu na bilo kom mestu celokupnog koda – početku, sredini ili kraju.
function MyTraceFunction() { trace(“Hi!”); }
2) Kreiranjem podatka definisanog kao ’Function’.
var MyTraceFunction:Function = function () { trace(“Hi!”); }
Bez obzira koji smo od ova dva načina definisanja funkcije iskoristili, kada poželimo u kodu možemo izvršiti našu funkciju.
MyTraceFunction();
Funkcije koje se izvršavaju klasičnim pozivanjem mogu a ne moraju imati ulazne parametre, i mogu a ne moraju imati povratne informacije.
function SayHi(Name:String):void {
trace(“Hi ” + Name + “!”);
}
SayHi(“Your name”);
U ovom slučaju ulazni parametar se zove „Name“ i pripada klasi ’String’. Kada iza funkcije piše ’:void’ podrazumeva se da funkcija ne šalje nazad povratne informacije. Preporuka je da se uvek piše ’:void’ kada je to moguće (nekada je i obavezno) da bi program radio.
Kada iza funkcije stoji neka klasa kao što je na primer ’Number’, to znači da funkcija treba da vrati informaciju klase ’Number’ tamo odakle je pozvana.
function SQRT(InputIntegerNumber:int):Number {
return Math.sqrt(InputIntegerNumber);
}
var Answer:Number = SQRT(2);
trace(Answer);
trace(SQRT(3));
Povratna informacija može biti bilo koja klasa. Glavne klase u AS3.0 su: ArgumentError, arguments, Array, Boolean, Class, Date, DefinitionError, Error, EvalError, Function, int, Math, Namespace, Number, Object, QName, RangeError, ReferenceError, RegExp, SecurityError, String, SyntaxError, TypeError, uint, URIError, Vector, VerifyError, XML i XMLList.
Svaka klasa može da ima definisana svoja svojstva, metode i konstante. Na primer klasa ‘Math’ ima definisane konstante: E:Number = 2.71828182845905; LN10:Number = 2.302585092994046; LN2:Number = 0.6931471805599453; LOG10E:Number = 0.4342944819032518; LOG2E:Number = 1.442695040888963387; PI:Number = 3.141592653589793; SQRT1_2:Number = 0.7071067811865476 i SQRT2:Number = 1.4142135623730951 i definisane metode: abs(val:Number):Number; acos(val:Number):Number; asin(val:Number):Number; atan(val:Number):Number; atan2(y:Number, x:Number):Number; ceil(val:Number):Number; cos(angleRadians:Number):Number; exp(val:Number):Number; floor(val:Number):Number; log(val:Number):Number; max(val1:Number, val2:Number, … rest):Number; min(val1:Number, val2:Number, … rest):Number; pow(base:Number, pow:Number):Number; random():Number; round(val:Number):Number; sin(angleRadians:Number):Number; sqrt(val:Number):Number i tan(angleRadians:Number):Number. Sva svojstva i metode vraćaju rezultat klase ‘Number’, a neke imaju neke od metoda zahtevaju jednu a neke dve ili vise ulaznih veličina.
trace(Math.cos(60 * Math.PI / 180));
Ulazne informacije u funkciju AS3.0 pretvara u niz i deklariše kao ’arguments’. Možete koristiti argumente funkcije za rekurzivno pozivanje funkcija.
TraceNumberOfRepeat (10, “*”);
function TraceNumberOfRepeat (NumberOfRepeat:int, Comment:String):void {
Ovaj primer ima 2 ulazne informacije: ’NumberOfRepeat’ klase ’int’ koji se imenuje i kao ’arguments[0]’ i ’Comment’ klase ’String’ koji se imenuje i kao ’arguments[1]’. Naredba ’arguments.callee ’ menja ime ’ TraceNumberOfRepeat’.
Specijalni način pozivanja funkcije za razumevanje argumenata je korišćenje ’rest’ parametra (ostalih parametara):
function ArgumentsArray(FirstValue:int, … RestArguments) {
trace(“FirstValue=” + FirstValue);
for (var Id:uint = 0; Id < RestArguments.length; Id ++) {
Ovakav opis funkcije dozvoljava da na kraju imate proizvoljan broj podataka.
U slučaju da neki od ulaznih parametara ima obično neku očekivanu vrednost, to može da se naznači pri definisanju funkcije:
function DefaultValue(FirstValue:int = 1, SecondValue:int = 2):int {
return FirstValue * SecondValue;
}
DefaultValue(3);
Iz ovog primera se vidi da broj ulaznih parametara funkcije nije isti broju parametara naredbi u kojoj se poziva funkcija. Oni parametri koji nedostaju uzimaju osnovne vrednosti, definisane unapred. Kod klasičnog definisanja funkcija AS3.0 prijavljuje grešku ako ovi parametri nisu isti.
Primena funkcija olakšava programiranje, razdvaja delove programskog koda na pregledne celine i omogućava nam da izvršimo zadatke koji su nekada neizvodljivi linijskim programiranjem. Za svako ozbiljnije programiranje neophodna je primena funkcija, a radi lakšeg razumevanja, potrudite se da nazive funkcija izaberete tako da Vam ukazuju jasno čemu one služe. Pošto u nazivu funkcije nije dozvoljeno prazno mesto, preporuka je da koristite velika slova za početke reči ili donju crtu za razdvajanje reči u nazivu. Bez obzira kako se Vama sviđa da imenujete nazive i funkcija i promenljivih, potrudite se da se pridržavate nekog pravila, jer ako treba kasnije da radite promene koda, mnogo će Vam biti lakše ako poštujete neka pravila.
Operatori su najčešće simboli na primer +, -, *, /, =, a mogu biti i reči. Služe nam za rad sa podacima, definisanje svojstava, karakteristika…
Spisak sa opisom svih operatora može se naći u pratećoj dokumentaciji, koja je ugrađena u Flash, i do nje se može doći klikom na ‘Help’.
Primarni operatori:
[ ] – inicijalizuje t.j. formira niz
{ x : y } – inicijalizuje objekat
( ) – grupni izrazi
f(x) – poziva funkciju
new – poziva konstruktor
y i x[y] – pristup osobini
<> I </> – inicijalizuje XML objekt (E4X)
@ – pristup atributima (E4X)
:: – kvalifikuje ime (E4X)
.. – pristup potomku XML elementa (E4X)
Unarni operatori:
:: – kvalifikuje ime (E4X)
+ – unarno plus
– – unarno minus
! – logičko NOT
~ – nad bitovima NOT
delete – briše osobinu
typeof – vraća tip informacije
void – vraća nedefinisanu vrednost
++ – unarno povećava vrednost za 1
— – unarno umanjuje vrednost za 1
Objašnjenje za ++ i –:
var NewId:Number = 0;
trace(++ NewId); // 1
trace(NewId); // 1
Postfiks operatori:
Postfiks operatori porasta ili smanjenja vrednosti se izvršavaju posle operacija:
++ – povećava vrednost za 1
— – smanjuje vrednost za 1
var NewId:Number = 0;
trace(NewId ++); // 0
trace(NewId); // 1
Operatori multiplikacije:
* – množenje
/ – deljenje
% – vraća ostatak pri deljenju – modul
Operatori dodavanja:
+ – sabiranje
– – oduzimanje
Operatori nad bitovima:
<< – pomeranje bitova ulevo
>> – pomeranje bitova udesno
>>> – nenegativno pomeranje bitova desno
Operatori upoređivanja:
< – manje od
> – veće od
<= – manje ili jednako od
>= – veće ili jednako od
as – proverava tip podatka
in – proverava osobine objekta
instanceof – proverava tip instance
is – proverava tip podatka
Operatori jednakosti:
== – jednako sa
!= – različito od
=== – striktno jednako
!== – striktno različito
Operatori nad bitovima:
& – logičko AND
^ – logičko XOR
| – logičko OR
Logički operatori:
&& – logičko AND
|| – logičko OR
Uslovni operator:
?: – Ovo je skraćeni operator niza naredbi:
if(question) { code_1} else { code_2}
Piše se u obliku:
SomeNumber > 0 ? trace(“it is > 0”): trace(“it is not > 0”);
Operatori dodeljivanja:
= – dodeljivanje vrednosti
*= – množenje svoje vrednosti novom i dodeljivanje vrednosti sebi
/= – deljenje svoje vrednosti novom i dodeljivanje vrednosti sebi
%= – modul svoje vrednosti novom i dodeljivanje vrednosti sebi
+= – sabiranje svoje vrednosti novom i dodeljivanje vrednosti sebi
-= – oduzimanje svoje vrednosti novom i dodeljivanje vrednosti sebi
<<= – logička operacija nad bitovima ulevo
>>= – logička operacija nad bitovima udesno
>>>= – logička nenegativna operacija nad bitovima udesno
&= – logičko AND
^= – logičko XOR
|= – logičko OR
Operator ‘.’ se koristi za dodeljivanje osobina objektima, pristupanje podacima klasama i razdvajanje pri importovanju paketa i klasa.
Operator ‘,’ se koristi za razdvajanje podataka.
Operator ‘:’ se koristi za definisanje tipa podataka, dodeljivanje tipa podatka parametrima funkcija ili označavanje povratnih informacija funkcija. Uslovne naredbe u AS3.0 nam omogućavaju da izvršavamo željene delove koda. Najčešća uslovna naredba je ’if( question ) { /* code */ }’ sa prikazanom sintaksom. Najzastupljeniji operatori koji se koriste u uslovnim naredbama su: == (služi za upoređenje – razlikovati od dodeljivanja vrednosti jednog simbola =), != (različito), <, >, <=, >=, && (logičko AND), || (Logičko OR) i !(Logičko NOT).
Postoji nekoliko osnovnih modela korišćenja uslovnih naredbi. Za sve je zajedničko da se iskaz – pitanje nalazi u okviru malih zagrada ( ), a blok koda koji se izvršava dok (ako) je uslov ispunjen se nalazi u okviru velikih zagrada { }.
Naredba ‘if’, predstavlja osnovnu naredbu grananja i odgovara pitanju ‘ako je’. Ako je iskaz u okviru malih zagrada tačan, izvršava se naredni blok koda u okviru velikih zagrada (može i kod bez velikih zagrada, kada se izvršava naredni iskaz). Ako iskaz nije tačan navedeni kod se preskače.
if(x == 2) { trace(“True!”); }
U slučaju da nije iskaz tačan moguće je izvršiti blok koda kada je iskaz netačan naredbom ‘else’ posle koje opet sledi blok koda u okviru velikih zagrada ili jedan iskaz bez zagrada.
else { trace(“False!”); }
U slučaju da želimo novi upit odmah nakon netačnog iskaza ‘if( )’, možemo da iskoristimo jedan iskaz bez zagrada i ponovo upotrebimo naredbu ‘if’ tako da naredba izgleda kao ‘else if’, koja se svodi na osnovnu naredbu ‘if’.
else if(x == 3) trace(“x = 3”);
Skraćeni oblik koji se ponekad može iskoristiti za jedan kod ‘if else’ je objašnjen u odeljku uslovni operator ‘?:’.
Naredba ‘switch’ je usavršena naredba ‘if’, koja menja više uzastopnih naredbi ‘if else’ ali na pregledniji način. Jedno pitanje – iskaz, može da ima više mogućnosti na osnovu kojih treba izvršiti odgovarajući blok koda. Posle naredbe ‘switch’ se u okviru velikih zagrada navode mogući slučajevi naredbom ‘case’ posle koje sledi blok koda koji se završava naredbom ‘break’. Ako se nijedan od slučajeva ne zadovolji izvršava se blok koda posle naredbe ‘default’ koji se takođe završava sa ‘break’. To može da se predstavi kodom:
var NowDate:Date = new Date();
var DayId:uint = NowDate.getDay();
switch(DayId) {
case 1:
trace(“Monday”);
break;
case 2:
trace(“Tuesday”);
break;
case 3:
trace(“Wednesday”);
break;
case 4:
trace(“Thursday”);
break;
case 5:
trace(“Friday”);
break;
case 6:
trace(“Saturday”);
break;
case 0:
trace(“Sunday…”);
trace(“It’s my favorite day!”);
break;
default:
trace(“Error!”);
break;
}
Naredba ‘while’ predstavlja naredbu grananja, koja programu nalaže da izvršava naredni blok koda u okviru velikih zagrada dok se ne ostvari ispunjenje uslova – iskaza.
var Id:int = 0;
var MaxId:int = 10;
var Sum:int = 0;
while(Id < MaxId) {
Id ++;
Sum += Id;
}
trace(“Sum=” + Sum);
Dodatak naredbi ‘while’ je naredba ‘do’, koja obezbeđuje da se blok koda izvrši jednom obavezno.
var Id:int = 0;
do {
Id ++;
trace(Id);
}
while (Id < 10);
Niz naredbi za elegantno kodiranje programskih petlji naredbom ‘for’ je sledeći:
for(var Id:int = 1; Id <= 10; Id ++) {
trace(Id);
}
Mogući su i drugačiji slični oblici kodiranja ‘for in’:
var PointObject:Object = {x:123, y:456};
for(var IndexName:String in PointObject) {
trace(IndexName + “: ” + PointObject[IndexName]);
}
Za rad sa ‘XML’ podacima koristi se ‘for each in’:
var myXML:XML = <Store>
<Day>Monday</Day>
<Day>Tuesday</Day>
<Day>Wednesday</Day>
<Day>Thursday</Day>
<Day>Friday</Day>
<Day>Saturday</Day>
<Day>Sunday</Day>
</Store>;
for each(var Item in myXML.Day) { // .
trace(Item);
}
trace(“—————“);
for each(var Day in myXML..Day) { // ..
trace(Day);
}
Primer 1. Sređivanje niza!
Niz od 10 slučajnih celih brojeva od 0 do 99 srediti u rastući.
Rešenje: Metoda 1.
// Create random array
var RandomArray:Array = new Array();
for(var Numer:int = 1; Numer <= 10; Numer ++) {
RandomArray[Numer] = int(Math.random() * 99.99);
trace(“Random number ” + String(Numer) + ” is: ” + String(RandomArray[Numer]));
}
// Arange array
for(var I1:int = 1; I1 <= 9; I1 ++) {
for(var J1:int = I1; J1 <= 10; J1 ++) {
if(RandomArray[I1] > RandomArray[J1]) {
var OldValue:int = RandomArray[I1];
RandomArray[I1] = RandomArray[J1];
RandomArray[J1] = OldValue;
}
}
}
// Print correct array
trace(“—————————————“);
for(Numer = 1; Numer <= 10; Numer ++) {
trace(“Ok number ” + String(Numer) + ” is: ” + String(RandomArray[Numer]));
}
Rešenje: Metoda 2.
var RandomArray:Array = new Array();
for(var Numer:int = 0; Numer <= 9; Numer ++) {
RandomArray[Numer] = int(Math.random() * 99.99);
}
trace(RandomArray);
// Bubbles method
var WorkAgain:Boolean = true;
while(WorkAgain) {
WorkAgain = false;
for(var I1:int = 0; I1 <= 8; I1 ++) {
if(RandomArray[I1] > RandomArray[I1 + 1]) {
var OldValue:int = RandomArray[I1];
RandomArray[I1] = RandomArray[I1 + 1];
RandomArray[I1 + 1] = OldValue;
WorkAgain = true;
}
}
}
trace(“—————————————“);
trace(RandomArray);
Rešenje: Metoda 3.
var RandomArray:Array = new Array();
for(var Numer:int = 0; Numer <= 9; Numer ++) {
RandomArray[Numer] = int(Math.random() * 99.99);
}
trace(RandomArray);
// Command
RandomArray.sort(Array.NUMERIC);
trace(“—————————————“);
trace(RandomArray);
Postoje i gotove naredbe za sređivanje alfanumeričkog niza po azbučnom redosledu u rastući (Array.CASEINSENSITIVE) ili opadajući (Array.DESCENDING). Primeri se mogu naći u odeljku Help. Unesite u polje za ’Search’ reč ’Array’ i izaberite stranu gde je nađeno ’Array’ kao glavna reč i videćete moguće naredbe za nizove i metode sa gotovim primerima.
Međutim, ovde smo rezultate ispisivali naredbom ’trace’ koja nam daje ispis u prozoru OUTPUT. Ovaj prozor nije vidljiv na WEB-u, niti u Flash Player-u. On samo služi za prikazivanje rezultata u fazi testiranja programa, dok se pravi aktivni prikaz kroz Flash Player radi korišćenjem klasa ili komponenata. Klasa koja služi za prikaz svih statičkih i dinamičkih tekstova, kao i tekstova koji se unose je ’TextField’. Kreiranjem AS3.0 kodom birate ime, i način prikaza ovog polja. Flash Vam nudi standardan prikaz sa formatiranjem teksta i polja gde se tekst prikazuje, upotrebu osnovnih HTML tagova i upotrebu CSS-a (Cascading Style Sheets).
NewTextExample.htmlText = “<P ALIGN=’LEFT’><FONT FACE=’Times New Roman’ SIZE=’14’ COLOR=’#ff0000′ LETTERSPACING=’2′><b>Lorem ipsum dolor sit amet.</b></FONT></P>”;
stage.addChild(NewTextExample);
Primer: Metoda 3.
import flash.display.*;
import flash.text.*;
var CssTextField:TextField = new TextField();
CssTextField.x = CssTextField.y = 10;
CssTextField.background = true;
CssTextField.backgroundColor = 0xff0000;
CssTextField.multiline = true;
CssTextField.autoSize = TextFieldAutoSize.LEFT;
stage.addChild(CssTextField);
var CssData:String = “p { font-family: Times New Roman, Times, _serif; font-size: 14; color: #000000; font-Style: italic; margin-left: 10; }”;
CssTextField.htmlText = “<h1>This is a headline</h1><p>This is a line of text.<br/><span class=’bluetext’>This line of text is colored blue.</span></p>”;
var Style:Object = CssStyleSheet.getStyle(“h1”);
CssTextField.htmlText += “<p>Headline font-family is: ” + Style.fontFamily + “</p>”;
CssTextField.htmlText += “<p>Headline color is: ” + Style.color + “</p>”;
Pored ovih metoda moguće je i bez programiranja postići ove efekte, primenom panela alata, menija i prozora ’Properties’. Uz pomoć njih se može direktno na ’stage’ dodati ’TextField’ i aranžirati po želji. ’TextField’ na ’stage’ se dodaje pomoću panela alata klikom na opciju ’TextTool’ te na ’stage’ gde želite da se pojavi ovo polje.
Kao što se iz priloženog vidi, u Flash-u je moguće na razne načine uraditi istu stvar. Na nama je da izaberemo metodu kojom dolazimo do rešenja.
Sve što se pojavljuje na ekranu, pomoću AS3.0 moguće je naknadno izmeniti, dodati filtere, osluškivače… Flash nam nudi da kroz kod dodamo osluškivače, u zavisnosti od kojih se izvršavaju odgovarajuće funkcije – akcije. Postoje razne vrste osluškivača koji startuju neku funkciju kada se desi predviđeni događaj. Događaji mogu biti vezani za: tastaturu, miša, vreme, učitavanja, greške… Primenljivi su na jednostavan način, a kada ih savladate, moći će te da unesete živost u svoje programe.
U AS3.0 postoje promenljivi i kostantni podaci. Njihovo obeležavanje je logično: ’var’ i ’const’, a i upotreba je prema nazivu predviđena – konstante možete definisati samo jednom u toku izvršavanja programa. Za svaki podatak u programiranju je predviđeno da se sastoji iz 3 različita dela:
1. Ime podatka – počinje uglavnom na slovo
2. Tip podatka – definiše ostale njegove osobine
3. Trenutna vrednost – zapisuje se u memoriji
Najvažniji tipovi podataka koje morate razumeti su: String, int, Number, uint i Boolean.
Tip ’String’ formira alfanumeričku promenljivu koja je predstavljena kao niz karaktera. var NewString:String = “Example…”;
Tip ’int’ formira promenljivu tipa Integer – celobrojnu 32-bitnu vrednost sa rasponom od -2 ↑ 31 do 2 ↑ 31 – 1 (-2.147.483.648 do 2.147.483.647). var FirstIntegerNumber:int = 237; var SecondIntegerNumber:int = -123.456;
Tip ’Number’ formira numeričku promenljivu opsega od približno 4.94 * e ↑ -324 do skoro 1.8 * e ↑ +308 (sa ’e’ se zapisuju brojevi u eksponencijalnom obliku t.j. e=10). U AS3.0 se koristi decimalna tačka ’.’ a ne zarez ’,’ kada se radi sa decimalnim brojevima. var FirstNumber:Number = 3.456; var SecondNumber:Number = -1.234e10; const ConstantNumber:Number = 3.14;
Tip ’uint’ formira celobrojnu pozitivnu promenljivu u 32-bitnom zapisu sa rasponom od 0 do 2 ↑ 32 – 1 (4294967295). var PositiveNumber:uint = 456;
Najčešća upotreba ovog tipa promenljive je za definisanje boja u heksadecimalnom zapisu kao ARGB zapis (Alpha, Red, Green, Blue su vrednosti od 0-255 tj. od 00-ff). var ColorNumber:uint = 0xff3377aa;
Tip ’Boolean’ formira logičku promenljivu koja ima vrednost ’true’ ili ’false’. var TrueVariable:Boolean = true; var FalseVariable:Boolean = false;
Pored ovih osnovnih tipova podataka, naredbom ’var’ možete da definišete ogroman broj podataka. Flash podržava rad sa nizovima, vremenskim podacima, xml zapisom, objektima, grafikom, muzikom, videom… var NewArray:Array = [1, 2, 3]; var FirstNumberFromArray:int = NewArray [0];
Iz ovog primera se vidi da se za odabir članova niza koriste uglaste zagrade ’[’ i ’]’, dok male zagrade ’(’ i ’)’ i velike zagrade ’{’ i ’}’ imaju drugačiju primenu.
Ja sam se oduševio specijalnom osobinom koju nam nudi AS3.0 kada je reč o nizovima (indeks niza može biti i string): NewArray [“SomeString “] = “YourChoice”;
Još neki primeri podataka: var CurrentTime:Date = new Date(); var CurrentYear:int = CurrentTime.fullYear; var XmlData:XML = 1.23; var ValueFromXmlData:Number = XmlData.SomeNumber; var MyObject:Object = new Object();
Objekti su srce AS3.0. Sve što kreiramo, svaka promenljiva, svaka funkcija, svaka klasa i bilo šta drugo može biti objekt. Može se tumačiti i da pri prikazivanju sadržaja prikazujemo razne tipove objekata. var DataForAll:* = 3.45; var DataForAll:* = true;
Znak ’*’ menja bilo koji tip podatka. Ovaj opis podataka je koristan kada se radi sa nizovima.
Kada neki podatak nije definisan, AS3.0 pri pozivanju istog daje osnovnu vrednost toga podakta. U narednoj tabeli su prikazane osnovne vrednosti podataka:
Vrsta podatka
Osnovna vrednost
String
null
int
0
Number
NaN
uint
0
Boolean
false
Object
null
Nedefinisan podatak
undefined
Ostale klase
null
Često se javlja potreba da ispitamo da li član niza postoji, pa moramo da znamo kako to da utvrdimo. Ključne reči i rezervisane reči se ne mogu koristiti za definisanje imena podataka, već samo na neki od načina koji je predviđen. U ovu grupu reči spadaju: as, break, case, catch, class, const, continue, default, delete, do, dynamic, each, else, extends, false, final, finally, for, function, get, if, implements, import, in, include, instanceof, interface, internal, is, namespace, native, new, null, override, package, private, protected, public, return, set, static, super, switch, this, throw, to, true, try, typeof, use, var, void, while i with. Neke od ovih reči AS3.0 dopušta za korišćenje za definisanje podataka na primer ‘each’, ali se preporučuje da se i one ne koriste za imena podataka.
Postoji i grupa rezervisanih reči koje takođe treba izbegavati za davanje imena podacima. To su: abstract, boolean, byte, cast, char, debugger, double, enum, export, float, goto, intrinsic, long, prototype, short, synchronized, throws, to, transient, type, virtual i volatile. Neke od njih su već predviđene za namenu u narednim izdanjima programa.