јан 122015
 

Android Zarada Uvod!

Pametni telefoni, tablet računari, a od skoro i pametni televizori čiji se rad zasniva na android operativnom sistemu (u daljem tekstu androidi) su postali najpopularniji uređaji danas. Sve je veći broj korisnika koji se opredeljuje da ih koristi. Jeftina cena, laka upotreba i kvalitetne performanse uz najbrži razvoj u odnosu na konkurenciju su najvažniji faktori koji su doveli do toga da se mnogi korisnici odluče za androide. Ogroman broj aplikacija i igara (u daljem tekstu aplikacija) i to besplatnih koje su u ponudi za android je jos jedna od prednosti u odnosu na konkurenciju. Međutim postavlja se pitanje: ako je aplikacija besplatna, koja je korist izdavača da je nudi svima? Na koji način izdavači – programerski timovi zarađuju, kada krajnji korisnici ne plaćaju ništa? Odgovor je prost – pomoću oglasa – reklama. Mnogi korisnici se bune što se u toku korišćenja aplikacija pojavljuju reklame. Ali to je ustvari cena za korišćenje besplatne aplikacije – da vidite reklamu. Vi možete da je samo isključite ako Vam smeta ili Vam se ne sviđa, a možete da budete fer i da je kliknete ponekad, i zaradite koji cent izdavaču aplikacije, a ujedno i firmi koja ugovara reklame – obično Google.

Kako to funkcioniše? Google nudi firmama prikazivanje reklama koje one žele. Ugovora se cena po pregledu koji se obično priznaje kada neko klikne na reklamu. Reklame mogu biti tekstualne, zvučne, slike ili video. Sve uglavnom funkcionišu na isti način.

Primer!

Neka firma na primer uplati 100€ na Google račun. Ona izabere vrednost od 0.02€ po prikazu jedne reklame. Kada Vi uključite aplikaciju, Google u zavisnosti od toga koja je apkikacija u pitanju i lokacije gde se nalazite, u predviđenom trenutku pojavljuje jednu od reklama. Ako ne kliknete na reklamu ili je isključite ništa se ne dešava i prikaz se ne računa – ne priznaje. Ako kliknete na reklamu, firmi iz gore navedenog primera se smanjuje sa računa predviđena cena prikaza jedne reklame od 0.02€. Ovaj iznos se deli prema odnosu koji je predviđen između Google firme i izdavača aplikacije na primer po 0.01€ svakom. Vi tj. korisnici niste oštećeni, a svi su zadovoljni. Firma se nada da će da ostvari neku korist – prikaže Vam neku informaciju ili proda Vam nešto na primer. Google i izdavač su podelili dogovorenu vrednost klika. Svi su zadovoljni. Dok postoji novac na računu – dok se ne potroše ovih 100€ Google će prikazivati ovu reklamu. U ovom primeru 5.000 puta. Nakon toga ova reklama prestaje da se prikazuje. Na ovaj način funkcioniše ostvarivanje zarade kod većine besplatnih aplikacija. U svetu je to prihvaćeno kao nešto sasvim normalno – kao sistem za informisanje i reklamiranje. Kod nas mnogi ovakav pristup vređaju, i beže od reklama kao da će da plate nešto ako ih kliknu, a nisu uneli ni žiro račun sa koga bi se mogao skinuti novac (na nekim uređajima je to obavezno). Čak pored toga ostavljaju i uvredljive komentare i daju loše ocene zbog reklama – i time samo odvraćaju druge korisnike da koriste te aplikacije, iako su one veoma kvalitetne. Ali takav je narod. Mnogi vole samo da napakoste, ometaju i omalovažavaju sve na šta naiđu, iako nemaju nikakve koristi od toga…

Nastavak!

Koja aplikacija će prikazati reklamu na koju postoji šansa da kliknete, zavisi od popularnosti aplikacije – broja korišćenja aplikacije. Što se više puta aplikacija preuzme odnosno pokrene, veća je šansa da se i klikne na reklamu koja je u njoj prikazana.

Postoje razni sajtovi i marketi – prodavnice za preuzimanje besplatnih aplikacija ili kupovinu aplikacija sa cenom. Reklamiranje aplikacija preko socijalnih mreža kao sto su facebook, google+, twitter, linkedln, tagged, hi5, myspace, flixter, instagram… je veoma korisno. Ali ako nemate veliki broj pratioca i unapred razrađenu strategiju informisanja krajnjih korisnika u problemu ste. Najvažnije je da Vaša aplikacija na Google marketu bude viđena na neki način. Google je predvideo pretragu aplikacija po ključnim rečima i prikaz po odgovarajućim kategorijama. Za svaku ključnu rec Google ima klasifikovanu listu aplikacija, koju prikazuje kada dobije upit. Ova lista se menja u određenim vremenskim intervalima (obično dnevno). Veoma je važno da za glavne ključne reči koje su vezane za aplikaciju, aplikacija bude na vrhu da bi dobila šansu da bude preuzeta i korišćena. Jos važnije od prikaza po ključnim rečima je prikaz aplikacija po kategorijama, jer je to najčešći način pretrage marketa radi preuzimanja aplikacija.

U zavisnosti od nekoliko faktora od kojih je najvažniji broj preuzimanja aplikacija, Google na svom sajtu vrši rangiranje aplikacija po kategorijama. Google svima nudi da preuzmu (ili kupe one koje nisu besplatne) aplikacije sa svog sajta – marketa. Svaka aplikacija je svrstana u neku od kategorija – muzika, karte, akcija… i rangirana je prema broju preuzimanja. Cilj svakog programera je da njegova aplikacija bude što bolje rangirana – da bi je videli slučajni korisnici koji gledaju šta je najpopularnije u nekoj kategoriji. Na to koju će aplikaciju izabrati utiče još mnogo faktora kao što su prosečna ocena, komentari drugih korisnika, dobro objašnjenje, dobar info sa slikama, info sa videom, glavna ikona i još mnogo toga.

Tekstovi!

Da bi došlo do preuzimanja aplikacije, nije dovoljno samo napraviti dobru aplikaciju. Mnoge dobre aplikacije ostaju nepopularne sa samo nekoliko desetina ili stotina preuzimanja. To nije dovoljno za ostvarivanje neke ozbiljne zarade. Naredni tekst je posvećen metodama za postizanje što boljeg mesta u Google marketu – metodama marketinga i objašnjenjima o mnogo bitnih stvari na koje treba obratiti pažnju.

Android Zarada

Android Zarada Uvod

 

Android Zarada!

 Android Zarada Uvod!

Android Zarada – Pravilan Početak!

Android Zarada – Saveti Za Optimizaciju!

Android Zarada – Reklame!

Android Zarada – Monetizacija!

Android Zarada – Marketing!

јан 052015
 

Rad u timu često može da bude sa toliko izmena programa, da i najsmirenije osobe može da dovede do negodovanja pri uvođenju bilo kakvih revizija. Niko ne voli da radi bilo koji posao uzalud, tj. da kasnije radi ponovo isti posao, a prethodni jednostavno zaboravi, kao da ga nije ni radio. Zato je za sve programere veoma bitno da unapred pripreme i predvide osnovnu strukturu programa, da bude takva da može sa što manje napora da se izmeni i nadogradi prema novim zahtevima. Ovaj posao nije toliko komplikovan ali zahteva ogromno iskustvo iz programiranja, i ako unapred isplanirate sve kako treba uštedećete mnogo vremena kasnije pri revizijama programa. Naravno, ne postoji univerzalni programski kod, i veoma je teško unapred predvideti šta će kasnije nekome u timu pasti na pamet, ali u toku izrade programa, često se javljaju nove ideje, čija se nadogradnja treba uraditi na što je moguće lakši način.

Iako skoro svako voli da pravi programe prema svom nahođenju i u zavisnosti od inspiracije uvek radi drugačije, potrebno je pridržavati se nekog osnovnog modela pri programiranju. Posle nekoliko nedelja, meseci ili više, ako se ukaže potreba za korišćenjem istog programa ili njegovih delova za neku drugu namenu, biće Vam lako da primenite postojeći kod ako se pridržavate gore navedenih pravila. U suprotnom, imaćete mnogo problema i mnogo više vremena će Vam biti potrebno da se snađete i prilagodite već urađeni posao u novim projektima.

Postoje razni programski jezici, a ovaj tekst se odnosi na korišćenje objektno orijentisanih programskih jezika poput c#, jave, Adobe Flash AS3.0 (moj omiljeni programski jezik) ili nekog drugog. Svima je zajednički cilj, a strategija programiranja se pomalo razlikuje, ali vodi ka istom rešenju. Na samom početku izrade programa, uvek izaberite naziv jednog ili više glavnih stanja poput promenljive ‘mainMode’, koja će biti dostupna svim delovima programa, bez obzira da li se radi o glavnom kodu ili o objektima. Ovu promenljivu stalno i svuda kontrolišite i u zavisnosti od njenog stanja preduzimajte odgovarajuće akcije. MainMode može imati vrednosti: initialization, intro, options, loading, game,  ads… i još mnoga stanja po vašoj želji zavisno od potrebe. Svaki deo programa treba da proverava na odgovarajućim mestima, da li je promenjena vrednost mainMode, i ako jeste da odreaguje kako treba. Moja preporuka je da glavna stanja imaju svoja predstanja. Na primer mainMode = ’startIntro’ je podešavanje koje prethodi izvršavanju funkcije Intro(…) koja na početku ima upit:

if (mainMode == ’startIntro’) { mainMode = ’intro’; … }

Na ovaj način se izbegava mogućnost višestrukog neželjenog izvršavanja koda. Na isti način se treba primeniti upit i za ostala stanja, i na taj način obezbediti sigurnost u radu, kao i lakše praćenje svih aktivnosti iz svih delova programa. Posle ovako formirane postavke glavnog koda, lako možete uvoditi nova stanja poput: pause, records, message, level1, level2… Treba samo dodati delove programskog koda o novim stanjima, i naravno šta se dešava kada se dese ta nova stanja. Ovakav pristup stanjima je i nejpogodniji pri programiranju kodova koji koriste komunikaciju sa serverom. Na primer kod igara sa više igrača postoje stanja poput: offline, online, logging, registering, active, busy, free, waiting… Razmenom informacija o stanjima između korisnika i servera precizno su određene akcije koje se mogu izvršiti, a koje ne.

Što se tiče saradnje u okviru tima, ona mora da bude dvosmerna u svim linijama na kojima se vrši razmena bilo kakvih informacija. Veoma je važna usaglašenost svih članova u timu. Na početku rada u timu, dolazi do velikih nesuglasica između osoba koje rade razne poslove – grafika, okruženje, animacija, programiranje, igrivost… ali već posle nekoliko završenih projekata, tim se uhodava, i skoro svi shvataju šta se može a šta ne. Svako voli da radi kako njemu odgovara, ali iz neophodnih razloga poput usaglašenosti i optimizacije, svi moraju da se prilagode konačnom cilju i manje više da izmene tj. da prilagode svoje navike timskom radu.

Programiranje bi moglo da se shvati kao objašnjenje za ponašanja računara na razne događaje koji dolaze od strane korisnika, u određenom vremenu ili na osnovu nekih događaja. Programer mora da objasni računaru programskim jezikom (kao stranim jezikom) šta će kada da se desi – izvrši. Ovo se odnosi i na glavni programski kod, i na kod koji se odnosi na objekte pojedinačno. U zavisnosti od programa, potrebno je predvideti i razmenu informacija – posmatranje stanja između objekata međusobno i glavnog programa, i na osnovu toga izvršavati predviđene zadatke. Pravilnim izborom stanja kao iz gore navedenog teksta, može se reagovati precizno, i bez pojave nepredviđenih situacija, jer se kontrolišu glavna stanja. Kada više programera rade zajedno, uvođenje stanja kao i dogovor o funkcionisanju je neohodno.

Na raznim platformama na kojima se izvršava program, postoje razni događaji koje je potrebno predvideti. Nije isto praviti program za računar, za telefon ili pametni televizor na primer. Svaka platforma ima neke svoje specifičnosti koje treba posebno pratiti i predvideti šta da se radi ako se iste dese. Najbolje rešenje je da sve potrebne informacije za ciljanu platformu spakujete zajedno, i pri instaliranju raspakujete i pripremite kako Vam odgovara, ali iz raznih razloga, nekada je potrebno dodatne informacije preuzeti sa nekog servera ili reagovati na dešavanja u realnom vremenu. Tada su mogući nepredviđeni događaji, na koje Vi ne možete da utičete – razni kvarovi servera, loš protok informacija, preopteređenost…

Nikada ne zaboravite da Vaš rad treba da sarađuje sa radom ostalih ljudi u timu. Zato pokušajte da što bolje usaglasite stavove, i nađete najbolji model koji će u najvećoj meri udgovarati svima i koga će se svi pridržavati.

дец 312014
 

Kontra Tablić!

Kontra Tablić za Android

Preuzmite za Vaš Android igru Kontra Tablic

Pravila igre Kontra Tablić

Kontra tablić je igra sa kartama za napredne igrače koji traže nove mogućnosti i zanimljivija pravila od klasične igre tablić. Pobeđuje igrač koji ostavari manje poena. U igri mogu učestvovati 2 ili 4 igrača, a postoji i opcija za igru u dublu. Cilj je suprotan Klasičnom Tabliću – odneti što manje karata tj. što manje štihova (10, J, Q, K, A) i ostvariti što manje poena. Igru gubi onaj igrač koji prvi pređe 101 poen.

Tok igre je sledeci:
Promešaju se 52 karte (uživo jedan od igrača – ko igra pre delioca preseca promešani špil).
4 karte se izbace na talon (sa dna špila uživo).
Svi igrači dobiju po 6 karata (2 puta po 3 redom).
Svi igrači igraju svoj potez redom kružno – izbacuju jednu kartu od svojih karata i moraju da nose karte sa talona – svoju i iste katre ako ih ima na talonu ili odgovarajuće kombinacije za nošenje karata (zbir vrednosti karata koji odgovara vrednosti izbačene karte). Karte koje odnesu sakupljaju na svoja posebna mesta da bi ih kasnije prebrojali i bodovali.
Potezi se igraju dok svi ne izbace svih 6 karata.
Kada se izbace svih 6 karata – dele se preostale karte iz špila – ponovo po 6 – dok ih ima, i opet se igraju potezi redom.
Kada više nema karata u špilu vrši se bodovanje.

Vrednosti karata za pravljenje kombinacija:
Kec – As ili 1 vredi 1 ili 11 – bilo kako odgovara da se uklopi vrednost zbira za pravljenje kombinacije.
Karte od 2 do 10 vrede isto kao svoj broj.
Žandar vredi 12.
Dama vredi 13.
Kralj vredi 14.

Pravila:

Kada igrač izbaci kartu, ako postoji takva ista na talonu ili je zbir drugih karata jednak vrednosti ove karte on mora da nosi svoju karte i kombinacije karata sa istim zbirom dok one postoje. Igrač bira koju će kombinaciju da nosi – mora da nosi ponovo kada postoji nova kompbinacija za nošenje.
Specijalni slučaj kada igrač ne mora da nosi istu kartu ili kombinaciju čiji je zbir sa istom vrednosti je kada ima dve iste karte u ruci i takva ista karta se nalazi na talonu- tada ima pravo da vrši dupliranje karte ako želi. U tom slucaju ako želi da ne nosi ništa samo izbacuje tu kartu na talon ali pokazuje svima da ima jos jednu kartu iste vrednosti.

Bodovanje:
Bodovanje je isto kao u igri tablić. Posle deljenja svih karata iz špila broje se poeni:
Svaki kec, desetka, žandar, dama i kralj vrede jedan poen.
Desetka kocka (karo) vredi dva poena.
Dvojka detelina (tref) vredi jedan poen.
Igrac koji je odneo najvise karata dobija 3 ekstra poena.
Svaka tabla vredi deset poena. Tabla se dobija kada igrač odnese sve karte sa talona, tako da na talonu nema više karata za nošenje. Table su mnogo bitne i obično su jedan od glavnih faktora na ishod partije.

Igra može da se igra u nekoliko modova:
– dva igrača
– četiri igraca – svako za sebe
– dubl – igra u parovima

Karakteristike:

– lak, normalan i težak mod – izaberi inteligenciju koju ima Vaš protivnik
– turnir mod – pobedi naše omiljene likove ako možeš
– nastavi zadnju partiju
– podešavanja – težina, boja pozadine, špil karata…
– statistika

Ova igra je perfektna za svu decu da nauče matematiku i unaprede svoju inteligenciju. Pružice Vam mnogo zabave.
Naši likovi su veoma pametni i morate se potruditi da ih pobedite. Možete je igrati besplatno na svom uređaju sa android operativnim sistemom…

Kontra Tablić

 

Koja igra je bolja?

Tablić VS Kontra Tablić

Tablić

Kontra-Tablić

дец 212014
 

Big Mystery

Big Mystery for Android

Big Mystery

Big Mystery is a new puzzle game in which you search for and arrange hidden/scattered objects into one unity. The rules are quite simple. Logical thinking is required, as well as good perception and often quick decision making. At some point, you might think that there’s no solution, but when you figure it out you’ll say “That was a piece of cake!”. That’s the best part of the game.

I recommend this game for all ages, adults and children. If you want to improve your IQ and perception to the smallest detail, then you came to the right place. Enjoy this awesome free game!

 

Game Modes
Two modes are involved: Tournament and Training.
Tournament– It has 21 levels with various difficulties. Before every level, a quick tip will appear, alongside some information like:
– Which level you chose. Is there a scheme. Is rotation on and does time limit occur.
– Correct positions of an object.
– Example of a completed level.
– A short tutorial.
Training – Here you can create your own levels by adjusting parameters (table size, rotation, scheme and time). By completing levels, this mode will gradually open up.
How to play
Instructions:
1. Select an object (click on it)
1.1 Rotate it (click again)
1.2 Switch places (click on another object)
1.3 Shift rows and columns (using arrows)
1.4 Deselect an object (button – Deselect)
2. Undo move (button – Back)

Big Mystery

нов 272014
 

FLASH MAHER

 

Adobe Flash Professional – Univerzalna knjiga

ACTION SCRIPT 3.0

 

FLASH I PHP

 

FLASH MAHER – FLASH I PHP

 

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);

UrlRequest.method = URLRequestMethod.GET;

UrlRequest.data = Variables;

var UrlLoader:URLLoader = new URLLoader();

UrlLoader.addEventListener(Event.COMPLETE, PhpAnswer);

try {

navigateToURL(UrlRequest);

}

catch (e:Error) {

// error

}

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.

2) Dvosmerna komunikacija
Da bi se ostvarila dvosmerna komunikacija možemo koristiti primer za php na adresi https://www.maher.rs/Examples/Php/Example_2.php:

<?php

$UserName = $_POST[“UserName”];

$Password = $_POST[“Password”];

if($UserName == “Voja” && $Password == “123456”) {

$Answer = “Answer=Ok&Message=Welcome ” . $UserName . “!”;

}

else {

$Answer = “Answer=No&Message=Wrong data…”;

}

echo $Answer;

?>

Ovaj primer poziva sledeći kod iz AS3.0:

import flash.net.*;

var InternetPath:String = “https://www.maher.rs/Examples/Php/Example_2.php”;

var PostVariables:URLVariables = new URLVariables();

PostVariables.UserName = “Voja”;

PostVariables.Password = “123456”;

var UrlRequest:URLRequest = new URLRequest(InternetPath);

UrlRequest.method = URLRequestMethod.POST;

UrlRequest.data = PostVariables;

var UrlLoader:URLLoader = new URLLoader();

UrlLoader.addEventListener(Event.COMPLETE, ResponseHandler);

try {

UrlLoader.load(UrlRequest);

}

catch (event:Error) {

trace(“Internet error…”);

}

function ResponseHandler(event:Event):void {

UrlLoader.removeEventListener(Event.COMPLETE, ResponseHandler);

UrlLoader = URLLoader(event.target);

var PostVariables:URLVariables = new URLVariables(UrlLoader.data);

if(String(PostVariables.Answer) != “Ok” && String(PostVariables.Answer) != “No”) {

trace(“No answer from php…”);

}

else {

trace(PostVariables.Message);

}

}

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!
FLASH MAHER – UVOD!
FLASH MAHER – OSNOVNI PODACI!
FLASH MAHER – OPERATORI I USLOVNE NAREDBE!
FLASH MAHER – FUNKCIJE!
FLASH MAHER – DOGAĐAJI!
FLASH MAHER – FILTERI!
FLASH MAHER – GRAFIKA!
FLASH MAHER – MASKA!
FLASH MAHER – ANIMACIJA!
FLASH MAHER – OPP – OBJEKTNO ORIJENTISANO PROGRAMIRANJE!
FLASH MAHER – FLASH I PHP!

VojaMaher

нов 252014
 

FLASH MAHER

 

Adobe Flash Professional – Univerzalna knjiga

ACTION SCRIPT 3.0

 

OPP – OBJEKTNO ORIJENTISANO PROGRAMIRANJE

 

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:

import Folder_1.Folder_2.Folder_3.*;

 

FLASH MAHER!
FLASH MAHER – UVOD!
FLASH MAHER – OSNOVNI PODACI!
FLASH MAHER – OPERATORI I USLOVNE NAREDBE!
FLASH MAHER – FUNKCIJE!
FLASH MAHER – DOGAĐAJI!
FLASH MAHER – FILTERI!
FLASH MAHER – GRAFIKA!
FLASH MAHER – MASKA!
FLASH MAHER – ANIMACIJA!
FLASH MAHER – OPP – OBJEKTNO ORIJENTISANO PROGRAMIRANJE!
FLASH MAHER – FLASH I PHP!

VojaMaher

нов 102014
 

FLASH MAHER

 

Adobe Flash Professional – Univerzalna knjiga

ACTION SCRIPT 3.0

 

ANIMACIJA

 

FLASH MAHER – ANIMACIJA

 

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.

 

FLASH MAHER!
FLASH MAHER – UVOD!
FLASH MAHER – OSNOVNI PODACI!
FLASH MAHER – OPERATORI I USLOVNE NAREDBE!
FLASH MAHER – FUNKCIJE!
FLASH MAHER – DOGAĐAJI!
FLASH MAHER – FILTERI!
FLASH MAHER – GRAFIKA!
FLASH MAHER – MASKA!
FLASH MAHER – ANIMACIJA!
FLASH MAHER – OPP – OBJEKTNO ORIJENTISANO PROGRAMIRANJE!
FLASH MAHER – FLASH I PHP!

VojaMaher

нов 052014
 

FLASH MAHER

 

Adobe Flash Professional – Univerzalna knjiga

ACTION SCRIPT 3.0

 

MASKA

 

FLASH MAHER – MASKA

 

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);

Text.filters = [FilterShadow, FilterGlow];

Text.text = “And\nyou are\ncertainly\ngood!!!”;

Photos[0].addChild(Text);

addChild(Photos[0]);

var OldId:int = 0;

var NewId:int = 1;

var MaxId:int = 0;

var MainXml:XML = new XML();

var XMLLoader:URLLoader = new URLLoader();

XMLLoader.addEventListener(Event.COMPLETE, CompleteHandler);

XMLLoader.load(new URLRequest(“Photos.xml”));

function CompleteHandler(event:Event):void {

XMLLoader.removeEventListener(Event.COMPLETE, CompleteHandler);

MainXml = new XML(event.target.data);

for each(var Picture in MainXml..Picture) {

MaxId += 1;

Photos[MaxId] = new MovieClip();

var NewPictureLoader:PictureLoader = new PictureLoader(Photos[MaxId], String(Picture.Name));

if(MaxId == 2) {

StartNextPhotos();

}

}

}

function StartNextPhotos():void {

Photos[NewId].alpha = 0;

addChild(Photos[NewId]);

var WaitTimer:Timer = new Timer(Number(MainXml.Speed));

WaitTimer.addEventListener(TimerEvent.TIMER, NextPicture);

WaitTimer.start();

function NextPicture(event:TimerEvent):void {

Photos[OldId].alpha -= Number(MainXml.AlphaStep);

Photos[NewId].alpha += Number(MainXml.AlphaStep);

if(Photos[OldId].alpha <= Number(MainXml.AlphaStep)) {

WaitTimer.removeEventListener(TimerEvent.TIMER, NextPicture);

WaitTimer.stop();

Photos[NewId].alpha = 1;

OldId = NewId;

NewId == MaxId ? NewId = 0: NewId ++;

setTimeout(StartNextPhotos, Number(MainXml.Pause));

}

event.updateAfterEvent();

}

}

Simbol ’MainMask’ ima svoj kod:

var RotateTimer:Timer = new Timer(30);

RotateTimer.addEventListener(TimerEvent.TIMER, RotatePicture);

RotateTimer.start();

function RotatePicture(event:TimerEvent):void {

this.rotation += 5;

event.updateAfterEvent();

}

Dodatni fajl u AS3.0 kodu je ’PictureLoader.as’ gde se vidi prost primer OOP:

package {

import flash.display.*;

import flash.events.*;

import flash.geom.*;

import flash.net.*;

public class PictureLoader {

public function PictureLoader(UniObject:MovieClip, Link:String):void {

var MyUILoader:Loader = new Loader();

MyUILoader.load(new URLRequest(Link));

MyUILoader.contentLoaderInfo.addEventListener( Event.COMPLETE, CompleteHandler);

function CompleteHandler(event:Event):void {

MyUILoader.contentLoaderInfo.removeEventListener( Event.COMPLETE, CompleteHandler);

UniObject.BitMap = Bitmap(MyUILoader.content);

UniObject.addChild(UniObject.BitMap);

}

}

}

}

I konačno ’Photos.xml’ je sledećeg koda:

<?xml version=”1.0″ encoding=”utf-8″?>

<Store>

      <Speed>50</Speed>

      <Pause>3000</Pause>

      <AlphaStep>0.05</AlphaStep>

      <Picture>

                  <Name>Picture1.jpg</Name>

      </Picture>

      <Picture>

                  <Name>Picture2.jpg</Name>

      </Picture>

      <Picture>

                  <Name>Picture3.jpg</Name>

      </Picture>

      <Picture>

                  <Name>Picture4.jpg</Name>

      </Picture>

      <Picture>

                  <Name>Picture5.jpg</Name>

      </Picture>

      <Picture>

                  <Name>Picture6.jpg</Name>

      </Picture>

      <Picture>

                  <Name>Picture7.jpg</Name>

      </Picture>

      <Picture>

                  <Name>Picture8.jpg</Name>

      </Picture>

      <Picture>

                  <Name>Picture9.jpg</Name>

      </Picture>

      <Picture>

                  <Name>Picture10.jpg</Name>

      </Picture>

</Store>

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”);

addChild(Photos);

var CircleMask:Sprite = new Sprite();

CircleMask.graphics.beginFill(0x000000);

CircleMask.graphics.drawCircle(100, 100, 50);

CircleMask.graphics.endFill();

addChild(CircleMask);

Photos.mask = CircleMask;

Photos.addEventListener(MouseEvent.MOUSE_DOWN, StartDrag);

Photos.addEventListener(MouseEvent.MOUSE_OUT, StopDrag);

Photos.addEventListener(MouseEvent.MOUSE_UP, StopDrag);

function StartDrag(event:MouseEvent):void {

CircleMask.startDrag();

}

function StopDrag(event:MouseEvent):void {

CircleMask.stopDrag();

}

U ovom primeru se poziva isti ’PictureLoader.as’ za učitavanje jedne slike. Moguće je i pomeranje maske mišem komandom ’startDrag()’.

 

FLASH MAHER!
FLASH MAHER – UVOD!
FLASH MAHER – OSNOVNI PODACI!
FLASH MAHER – OPERATORI I USLOVNE NAREDBE!
FLASH MAHER – FUNKCIJE!
FLASH MAHER – DOGAĐAJI!
FLASH MAHER – FILTERI!
FLASH MAHER – GRAFIKA!
FLASH MAHER – MASKA!
FLASH MAHER – ANIMACIJA!
FLASH MAHER – OPP – OBJEKTNO ORIJENTISANO PROGRAMIRANJE!
FLASH MAHER – FLASH I PHP!

VojaMaher

нов 012014
 

FLASH MAHER

 

Adobe Flash Professional – Univerzalna knjiga

ACTION SCRIPT 3.0

 

GRAFIKA

 

FLASH MAHER – GRAFIKA

 

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.

beginShaderFill(shader:Shader, matrix:Matrix = null):void
Formira metodu Shader ispune.

clear():void
Briše grafiku i resetuje sve karakteristike ispune na osnovne.

copyFrom(sourceGraphics:Graphics):void
Kopira sve grafičke komande sa navedene mete.

curveTo(controlX:Number, controlY:Number, anchorX:Number, anchorY:Number):void
Iscrtava krivu liniju definisanu kontrolnom tačkom i tačkom utočišta.

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.

drawRect(x:Number, y:Number, width:Number, height:Number):void
Iscrtava pravougaonik.

drawRoundRect(x:Number, y:Number, width:Number, height:Number, ellipseWidth:Number, ellipseHeight:Number = NaN):void
Iscrtava pravougaonik sa zaobljenim uglovima.

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:

import flash.display.*;

import flash.geom.*;

var Picture:Sprite = new Sprite();

Picture.graphics.lineStyle(20, 0x000000, 1, false, “normal”, null, null, 3);

Picture.graphics.lineTo(100, 50);

Picture.graphics.curveTo(200, 150, 50, 250);

Picture.graphics.drawCircle(200, 50, 20);

stage.addChild(Picture);

Picture.graphics.lineStyle(10);

var MyMatrix:Matrix = new Matrix(1, 0, 0, 1, 0, 0);

MyMatrix.createGradientBox(30, 30, 0, 0, 0);

Picture.graphics.lineGradientStyle(“radial”, [0xff0000, 0x00ff00, 0x0000ff], [1, 1, 1], [0, 128, 255], MyMatrix, “repeat”, “rgb”, 0);

Picture.graphics.moveTo(0, 0);

Picture.graphics.lineTo(550, 400);

Picture.graphics.drawCircle(300, 100, 50);

Picture.graphics.drawEllipse(300, 200, 100, 30);

Picture.graphics.lineStyle(2, 0xff0000);

Picture.graphics.drawRect(400, 100, 60, 40);

Picture.graphics.drawRoundRect(400, 150, 60, 40, 20);

Picture.graphics.lineGradientStyle(“radial”, [0xff0000, 0x00ff00, 0x0000ff], [1, 1, 1], [0, 128, 255], MyMatrix, “pad”, “rgb”, 0);

Picture.graphics.drawTriangles(Vector.([100,200, 200,200, 100,300, 200,300]), Vector.([0,1,2, 1,3,2]));

 

U narednom primeru prikazane su metode za iscrtavanje ispuna – tela:

import flash.display.*;

import flash.geom.*;

var Picture:Sprite = new Sprite();

Picture.graphics.beginFill(0x0000ff, 1);

Picture.graphics.lineTo(100, 50);

Picture.graphics.curveTo(200, 150, 50, 250);

Picture.graphics.beginFill(0xff00ff, 1);

Picture.graphics.drawCircle(200, 50, 20);

stage.addChild(Picture);

Picture.graphics.lineStyle(10);

var LineMatrix:Matrix = new Matrix(1, 0, 0, 1, 0, 0);

LineMatrix.createGradientBox(20, 20, 0, 0, 0);

Picture.graphics.lineGradientStyle(“linear”, [0xff0000, 0x00ff00, 0x0000ff], [1, 1, 1], [0, 128, 255], LineMatrix, “repeat”, “rgb”, 0);

var BodyMatrix:Matrix = new Matrix(1, 0, 0, 1, 0, 0);

BodyMatrix.createGradientBox(20, 20, 0, 0, 0);

Picture.graphics.beginGradientFill(“radial”, [0x333333, 0x00ff00, 0x999999], [1, 1, 1], [100, 128, 150], BodyMatrix, “repeat”, “lineaRgb”, 0);

Picture.graphics.moveTo(0, 0);

Picture.graphics.lineTo(550, 400);

Picture.graphics.drawCircle(300, 100, 50);

Picture.graphics.drawEllipse(300, 200, 100, 30);

Picture.graphics.lineStyle(2, 0xff0000);

Picture.graphics.drawRect(400, 100, 60, 40);

Picture.graphics.drawRoundRect(400, 150, 60, 40, 20);

Picture.graphics.beginGradientFill(“linear”, [0xff0000, 0x00ff00, 0x0000ff], [1, 1, 1], [100, 128, 155], BodyMatrix, “repeat”, “rgb”, 0);

Picture.graphics.drawTriangles(Vector.([100,200, 200,200, 100,300, 200,300]), Vector.([0,1,2, 1,3,2]));

Picture.graphics.endFill();

 

U narednom primeru prikazane su metode za iscrtavanje korišćenje ’BitmapData’ ispuna i na linije i na ispune:

import flash.display.*;

import flash.geom.*;

import flash.net.*;

var Picture:Sprite = new Sprite();

var ImageLoader:Loader = new Loader();

ImageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, CompleteHandler);

ImageLoader.load(new URLRequest(“Picture1.jpg”));

function CompleteHandler(event:Event):void {

ImageLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, CompleteHandler);

var BitMap:Bitmap = Bitmap(ImageLoader.content);

var Rectang:Rectangle = new Rectangle(0, 0, ImageLoader.width, ImageLoader.height);

var BitMapData:BitmapData = new BitmapData(ImageLoader.width, ImageLoader.height);

BitMapData.copyPixels(BitMap.bitmapData, Rectang, new Point(0, 0));

Picture.graphics.beginBitmapFill(BitMapData, new Matrix(), true, false);

Picture.graphics.lineTo(100, 50);

Picture.graphics.curveTo(200, 150, 50, 250);

Picture.graphics.drawCircle(200, 50, 20);

stage.addChild(Picture);

Picture.graphics.lineStyle(10);

var LineMatrix:Matrix = new Matrix(1, 0, 0, 1, 0, 0);

LineMatrix.createGradientBox(20, 20, 0, 0, 0);

Picture.graphics.lineGradientStyle(“linear”, [0xff0000, 0x00ff00, 0x0000ff], [1, 1, 1], [0, 128, 255], LineMatrix, “repeat”, “rgb”, 0);

var BodyMatrix:Matrix = new Matrix(1, 0, 0, 1, 0, 0);

BodyMatrix.createGradientBox(20, 20, 0, 0, 0);

Picture.graphics.drawCircle(300, 100, 50);

Picture.graphics.drawEllipse(300, 200, 100, 30);

Picture.graphics.lineStyle(20, 0xff0000);

Picture.graphics.beginFill(0x000000, 0);

Picture.graphics.lineBitmapStyle(BitMapData, new Matrix(), true, false);

Picture.graphics.drawRect(400, 50, 60, 40);

Picture.graphics.drawRoundRect(400, 150, 60, 40, 20);

Picture.graphics.drawTriangles(Vector.([100,300, 200,300, 100,380, 200,380]), Vector.([0,1,2, 1,3,2]));

Picture.graphics.endFill();

}

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.

 

FLASH MAHER!
FLASH MAHER – UVOD!
FLASH MAHER – OSNOVNI PODACI!
FLASH MAHER – OPERATORI I USLOVNE NAREDBE!
FLASH MAHER – FUNKCIJE!
FLASH MAHER – DOGAĐAJI!
FLASH MAHER – FILTERI!
FLASH MAHER – GRAFIKA!
FLASH MAHER – MASKA!
FLASH MAHER – ANIMACIJA!
FLASH MAHER – OPP – OBJEKTNO ORIJENTISANO PROGRAMIRANJE!
FLASH MAHER – FLASH I PHP!

VojaMaher

окт 302014
 

FLASH MAHER

 

Adobe Flash Professional – Univerzalna knjiga

ACTION SCRIPT 3.0

 

FILTERI

 

FLASH MAHER – FILTERI

 

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:

1. Bevel filter (BevelFilter class)
2. Blur filter (BlurFilter class)
3. Drop shadow filter (DropShadowFilter class)
4. Glow filter (GlowFilter class)
5. Gradient bevel filter (GradientBevelFilter class)
6. Gradient glow filter (GradientGlowFilter class)
7. Color matrix filter (ColorMatrixFilter class)
8. Convolution filter (ConvolutionFilter class)
9. Displacement map filter (DisplacementMapFilter class)
10. Shader filter (ShaderFilter class)

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:

BevelFilter(distance:Number = 4.0, angle:Number = 45, highlightColor:uint = 0xFFFFFF, highlightAlpha:Number = 1.0, shadowColor:uint = 0x000000, shadowAlpha:Number = 1.0, blurX:Number = 4.0, blurY:Number = 4.0, strength:Number = 1, quality:int = 1, type:String = “inner”, knockout:Boolean = false)

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.

import flash.filters.*;

import flash.display.*;

import flash.events.*;

import flash.text.*;

import flash.geom.*;

import flash.net.*;

var Square:Array = new Array();

for(var Id:int = 0; Id < 10; Id ++) {

Square[Id] = new Sprite();

Square[Id].graphics.lineStyle(20, 0x006600, 1);

Square[Id].graphics.beginFill(0x0033ff, 1);

Square[Id].graphics.drawRect(Id * 100 + 20, 20, 60, 60);

Square[Id].graphics.endFill();

stage.addChild(Square[Id]);

}

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:

BlurFilter(blurX:Number = 4.0, blurY:Number = 4.0, quality:int = 1)

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:

DropShadowFilter(distance:Number = 4.0, angle:Number = 45, color:uint = 0, alpha:Number = 1.0, blurX:Number = 4.0, blurY:Number = 4.0, strength:Number = 1.0, quality:int = 1, inner:Boolean = false, knockout:Boolean = false, hideObject:Boolean = false)

var Drop:DropShadowFilter = new DropShadowFilter(10, 45, 0x333333, 0.7, 5, 10, 1, 3, false, false, false);

Square[3].filters = [Drop];

4. Glow filter je filter koji dodaje efekat odsjaja objektima. Klasa GlowFilter ima sledeća svojstva:

GlowFilter(color:uint = 0xFF0000, alpha:Number = 1.0, blurX:Number = 6.0, blurY:Number = 6.0, strength:Number = 2, quality:int = 1, inner:Boolean = false, knockout:Boolean = false)

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:

GradientBevelFilter(distance:Number = 4.0, angle:Number = 45, colors:Array = null, alphas:Array = null, ratios:Array = null, blurX:Number = 4.0, blurY:Number = 4.0, strength:Number = 1, quality:int = 1, type:String = “inner”, knockout:Boolean = false)

var GradientBevel:GradientBevelFilter = new GradientBevelFilter(10, 45, [0xffffff, 0x0000ff, 0xff0000], [1, 0.5, 1], [0, 128, 255], 5, 10, 1, 3, “inner”, false);

Square[5].filters = [GradientBevel];

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:

GradientGlowFilter(distance:Number = 4.0, angle:Number = 45, colors:Array = null, alphas:Array = null, ratios:Array = null, blurX:Number = 4.0, blurY:Number = 4.0, strength:Number = 1, quality:int = 1, type:String = “inner”, knockout:Boolean = false)

var GradientGlow:GradientGlowFilter = new GradientGlowFilter(0, 0, [0x9932ff, 0x0000FF, 0x9900FF, 0xFF0000, 0xFFFF00], [1, 1, 1, 1, 1], [0, 32, 64, 128, 225], 10, 10, 2, 3, “outer”, false);

Square[6].filters = [GradientGlow];

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:

ColorMatrixFilter(matrix:Array = null)

var ColorMat:ColorMatrixFilter = new ColorMatrixFilter([1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0]);

Square[7].filters = [ColorMat];

U dodatnom primeru je prikazana primena Color matrix filtera na istu sliku koja se učitava programski, sa posebno setovanom crvenom, zelenom i plavom.

var ColorMatrixMovie:MovieClip = new MovieClip();

ColorMatrixMovie.x = 450;

stage.addChild(ColorMatrixMovie);

BuildChild(null, 0, 0);

BuildChild(ApplyRed, 130, 50);

BuildChild(ApplyGreen, 260, 100);

BuildChild(ApplyBlue, 390, 150);

function BuildChild(LoadHandler:Function, PositionX, PositionY):void {

var PictureLoader:Loader = new Loader();

PictureLoader.x = PositionX;

PictureLoader.y = PositionY + 130;

PictureLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, IOErrorHandler);

if (LoadHandler != null) {

PictureLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, LoadHandler);

}

PictureLoader.load(new URLRequest(“Picture.jpg”));

ColorMatrixMovie.addChild(PictureLoader);

}

function ApplyRed(event:Event):void {

var Child:DisplayObject = DisplayObject(event.target.loader);

var MyMatrix:Array = new Array();

MyMatrix = MyMatrix.concat([1, 0, 0, 0, 0]); // red

MyMatrix = MyMatrix.concat([0, 0, 0, 0, 0]); // green

MyMatrix = MyMatrix.concat([0, 0, 0, 0, 0]); // blue

MyMatrix = MyMatrix.concat([0, 0, 0, 1, 0]); // alpha

ApplyFilter(Child, MyMatrix);

}

function ApplyGreen(event:Event):void {

var Child:DisplayObject = DisplayObject(event.target.loader);

var MyMatrix:Array = new Array();

MyMatrix = MyMatrix.concat([0, 0, 0, 0, 0]); // red

MyMatrix = MyMatrix.concat([0, 1, 0, 0, 0]); // green

MyMatrix = MyMatrix.concat([0, 0, 0, 0, 0]); // blue

MyMatrix = MyMatrix.concat([0, 0, 0, 1, 0]); // alpha

ApplyFilter(Child, MyMatrix);

}

function ApplyBlue(event:Event):void {

var Child:DisplayObject = DisplayObject(event.target.loader);

var MyMatrix:Array = new Array();

MyMatrix = MyMatrix.concat([0, 0, 0, 0, 0]); // red

MyMatrix = MyMatrix.concat([0, 0, 0, 0, 0]); // green

MyMatrix = MyMatrix.concat([0, 0, 1, 0, 0]); // blue

MyMatrix = MyMatrix.concat([0, 0, 0, 1, 0]); // alpha

ApplyFilter(Child, MyMatrix);

}

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:

ConvolutionFilter(matrixX:Number = 0, matrixY:Number = 0, matrix:Array = null, divisor:Number = 1.0, bias:Number = 0.0, preserveAlpha:Boolean = true, clamp:Boolean = true, color:uint = 0, alpha:Number = 0.0)

var Convolution:ConvolutionFilter = new ConvolutionFilter(3, 3, [0, 1, 0, 1, 0, 0, 0, 0, 1], 1, 0, true, true, 0xff0000, 0);

Square[8].filters = [Convolution];

U dodatnom primeru je prikazana primena na sliku koja se posebno učitava:

var ConvolutionMovie:MovieClip = new MovieClip();

ConvolutionMovie.y = 350;

stage.addChild(ConvolutionMovie);

var ImageLoader:Loader = new Loader();

ImageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, ApplyFilter);

ImageLoader.load(new URLRequest(“Picture.jpg”));

ConvolutionMovie.addChild(ImageLoader);

function ApplyFilter(event:Event):void {

ImageLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, ApplyFilter);

var ConvolutionMatrix:Array = [1, 0, 0, 0, 0, 1, 0, 0, 0];

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:

DisplacementMapFilter(mapBitmap:BitmapData = null, mapPoint:Point = null, componentX:uint = 0, componentY:uint = 0, scaleX:Number = 0.0, scaleY:Number = 0.0, mode:String = “wrap”, color:uint = 0, alpha:Number = 0.0)

var Displacement:DisplacementMapFilter = new DisplacementMapFilter(new BitmapData(100, 100, false, 0xff8800), new Point(10, 10), 20, 20, 0.5, 0.8, DisplacementMapFilterMode.CLAMP, 0xffff88, 1);

Square[9].filters = [Displacement];

U dodatnom primeru je prikazana primena ovog filtera na promenu izgleda objekta i teksta.

var DisplacementMovie:MovieClip = new MovieClip();

DisplacementMovie.y = 130;

stage.addChild(DisplacementMovie);

var BgColor:uint = 0xFFCC00;

var Size:uint = 200;

var DisMatrix:Matrix = new Matrix();

DisMatrix.createGradientBox(Size, Size);

DisplacementMovie.graphics.beginGradientFill(GradientType.RADIAL, [0xFF0000, 0x0000FF], [100, 100], [55, 200], DisMatrix, SpreadMethod.PAD);

DisplacementMovie.graphics.drawRect(0, 0, Size, Size);

DisplacementMovie.graphics.endFill();

var DisField:TextField = new TextField();

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.

SomeObject.filters = [Glow, Bevel, Drop];

Ukljanjanje filtera se radi na sledeći način:

SomeObject.filters = [];

 

FLASH MAHER!
FLASH MAHER – UVOD!
FLASH MAHER – OSNOVNI PODACI!
FLASH MAHER – OPERATORI I USLOVNE NAREDBE!
FLASH MAHER – FUNKCIJE!
FLASH MAHER – DOGAĐAJI!
FLASH MAHER – FILTERI!
FLASH MAHER – GRAFIKA!
FLASH MAHER – MASKA!
FLASH MAHER – ANIMACIJA!
FLASH MAHER – OPP – OBJEKTNO ORIJENTISANO PROGRAMIRANJE!
FLASH MAHER – FLASH I PHP!

VojaMaher