сеп 232016
 

Yamb Plus!

Yamb Plus je jedna od najpopularnijih igara sa kockicama poznata i kao Yahtzee, Yatzy, Jamb…

Online Yamb

 

Yamb Plus igra se naizgled zasniva na sreći u bacanju kockica, ali je u stvari prava strateška igra, u kojoj inteligencija, intuicija, planiranje, iskustvo i još mnogo faktora utiče na konačni rezultat. Osnovni cilj je osvojiti što više poena u igri, a poeni se dobijaju tako što se popunjuje tabela po Vašem izboru, na osnovu kockica koje bacate.

Glavna igra se igra sa 5 ili 6 kockica, i sa 4 ili 7 kolona, ali moguće su i drugačije izvedbe. Svaki potez se sastoji iz maksimalno 3 bacanja kockica, posle kojih se upisuje rezultat u jedno od polja. Posle svakog bacanja kockica, možete da izaberete one kockice koje Vam se sviđaju i zadržite ih, a ostale do kraja poteza bacite ponovo.

Tabela mora da se popunjava po odgovarajućim pravilima definisanim za svaku kolonu posebno. Postoje razne kolone i to:

  • Kolona koja se popunjava na dole, počev od broja 1.
  • Slobodna kolona – popunjava se po želji.
  • Kolona koja se popunjava na gore, počev od jamba.
  • Kolona koja se popunjava tako što se izabere polje posle prvog bacanja – najavi se polje po želji.
  • Kolona slobodne najave – odabira se kao polje posle prvog bacanja, s tim da možete da popunite na kraju poteza bilo koje polje u njoj.
  • Kolona koja se popunjava od sredine naviše i naniže.
  • Ručna kolona – popunjava se posle prvog bacanja.

Na osnovu izbora načina popunjavanja kolona, Vi utičete na konačni broj poena. Što bolje planirate redosled popunjavanja kolona ostvarićete više poena.

Yamb

Yamb

Ovaj Yamb je programiran pomoću Adobe Flash programa pomoću AS3.0, po uzoru na besplatni Yamb za android uređaje koji možete preuzeti na lokaciji Yamb za android.

Yamb

Karakteristike programa:

  • Online yamb rekordi.
  • 5 ili 6 kockica.
  • 4 ili 7 kolona.
  • Vraćanje poteza.
  • Snimanje partije.
  • Rekordi za svaki mesec.

 

Pravila za bodovanje:

Yamb Plus tj. Yamb se različito boduje kada se igra sa 4 ili 7 kolona. Osnovno bodovanje je sledeće:

  • U polja od 1 – 6 se upisuje zbir odgovarajućih kockica sa brojevima od 1 – 6.
  • U polje maksimum se upisuje zbir 5 kockica – cilj je da je što veći.
  • U polje minimum se upisuje zbir 5 kockica – cilj je da je što manji.
  • Triling predstavlja dobitak 3 iste kockice.
  • Ful je dobitak 3 iste kockice i 2 iste kockice.
  • Poker je dobitak 4 iste kockice.
  • Yamb je dobitak 5 istih kockica.
  • Zbir polja od 1 – 6 koji je minimum 60 poena donosi bonus 30 poena.
  • Razlika maksimuma i minimuma, pomnožena brojem jedinica koja je bar 60 u jambu sa 7 kolona donosi bonus 30 poena.
  • Triling dobija bonus 20 poena (40 kod 7 kolona).
  • Kenta se boduje 45 – mala ili 50 poena – velika bez obzira na broj bacanja u igri sa 4 kolone, ili 60 / 50 / 40 u zavisnosti od broja bacanja – 1 / 2/ 3 kod igre sa 7 kolona.
  • Ful dobija bonus 40 poena (60 kod 7 kolona).
  • Poker dobija bonus 50 poena (70 kod 7 kolona).
  • Yamb dobija bonus 80 poena i za igru sa 4 i za igru sa 7 kolona.

Pokušajte da se upišete u neku od tabela rekorda. Podelite ovu informaciju sa prijateljima, i uskoro se nadamo radu verziji Yamb Plus za više igrača uživo – multiplayer mod.

Pozdravlja Vas VojaMaher…

феб 072015
 

Monetizacija kod besplatnih android aplikacija je osnovni izvor prihoda objavljivačima aplikacija (programerima) i glavni razlog zašto se aplikacije prave. Postoje razne firme koje Vam nude nadogradnju aplikacija dodacima za monetizaciju, ali morate biti veoma pažljivi pri izboru metode za monetizaciju, jer Google ima stroga pravila (pročitajte nekoliko strana o uslovima korišćenja), i ako ih prekršite može doci do gašenja Vašeg naloga. Zato preporučujem korišćenje servisa koji nudi Google nazvanog AdMob koji predstavlja sigurno rešenje, a i zarade koje se ostvaruju njegovim korišćenjem mogu biti sasvim solidne.

Na sajtu za programere Google objašnjava kako funcioniše monetizacija pomoću AdMob servisa kada radite u Java okruženju, dok ako koristite neki drugi programski jezik, morate da dodate u svom paketu specijalne dodatke koji vrše usklađivanje rada sa Javom i pozivanje glavnog servisa koji radi u Javi.

Na sajtu otvorenog koda github.com mogu se besplatno naći pomenuti dodaci za neka programska okruženja, a ovi dodaci se i prodaju na nekim sajtovima, i obično im je cena od 10 – 50 €. Njihovo funkcionisanje je veoma teško kontrolisati, jer im se samo šalje informacija o broju programera odnosno broju reklame – podaci za monetizaciju. Ovi dodaci šalju AdMob servisu predviđene podatke o aplikaciji, korisniku i lokaciji i naravno Vaše podatke za monetizaciju, a ostalo se sve odradi automatski, prikažu se reklame i isključe se kada se sakriju, uklone ili završe planirani posao.

Najpopularnija okruženja pored okruženja Jave u kojima se rade aplikacije za androide koja podržavaju monetizaciju pomocu reklama su Unity3d i Adobe Flash – Air. Za oba okruženja postoji po nekoliko dodataka za povezivanje sa Javom radi monetizacije, a pri izboru posebno obratite pažnju da li su ovi dodaci usklađeni sa najnovijim propisima koje zahteva Google. Oba sistema rade slično.

Dodatak koji ja koristim za monetizaciju pomocu Unity3d okruzenja je: AdmobVNTIS. Kod Unity3d programa treba raspakovati paket koji u sebi ima dosta fajlova sa ekstenzijom ‘.cs’ i ‘.jar’. Za aktiviranje reklama potrebno je na scenu dodati ‘prefab’ objekt i nakon toga na predviđeno mesto popuniti stringove tipa ‘ca-pub-xxx/yyy’ za ‘Banner’ i ‘ca-pub-xxx/zzz’ za ‘Interstitial’ reklamu. Ovi stringovi se dobijaju na sajtu AdMob, kada napravite novu oglasnu jedinicu – reklamu.

Pored ovog potrebno je i paket Google servisa GooglePlayLicenseVerification sa ‘hash’ kodom dodati ili tzv. ‘Base64-encoded RSA public key’, i popuniti na nekoliko mesta string koji se dobija pri prijavljivanju nove aplikacije na Google market. Ovaj kod se na nalazi na glavnom sajtu https://play.google.com/ u okviru aplikacije koju objavljujete u sekciji ‘SERVICES & APIS’ i popunjava se u fajlu ‘CheckLVLButton.cs’. Google automatski priznaje kada popunite ovaj kod, a bez njega ne dozvoljava da postavite aplikaciju na glavnom sajtu.

Takođe je potrebno pripremiti odgovarajuće ikone, i napraviti sertifikat sa Vašim podacima programom Unity3d u okviru opcije ‘File / Build Settings… / Android / PlayerSettings / Publishing Settings / Create New Keystore’, koji morate koristiti ako želite da objavite novu verziju aplikacije.

Davanje imena aplikacije je proizvoljno po Vašoj zelji, a obično se koristi obrnuti zapis domena iza čega ide naziv aplikacije – ‘com.vasdomen.imeaplikacije’ ili slično.

Unity3d mnoge stvari odradi automatski, ali pregledajte sve podatke koje se nalaze u ovom prozoru sa podešavanjima, i popunite ili izmenite šta je još potrebno.

Po kreiranju foldera ‘apk’ sa fajlom sa ekstenzijom ‘.apk’ prekontrolišite kako aplikacija radi na Vašem android uređaju, pre nego sto je objavite, i ako treba ispravite greške ako ih ima.

Adobe dodaci imaju za dodatak fajl tipa ‘.ane’ (android native extenstion) uz fajlove tipa ‘.as’ (action script), a može se naci i tip fajla kao što je ‘.swc’. Njihova implementacija se zasniva na raspakovanje paketa i unošenje stringa Vaše reklame tipa ‘ca-pub-xxx/yyy’ i ‘ca-pub-xxx/zzz’. Ove šifre se dobijaju na sajtu AdMob posebno za reklame tipa ‘Banner’ a posebno za reklame tipa ‘Interstitial’. Unošenjem ovih šifri na predviđeno mesto i pozivanjem reklame tipa ‘Banner’ ili tipa ‘Interstitial’ vrši se jedno prikazivanje reklame. Za ponovno prikazivanje ‘Interstitial’ reklame potrebno je ponovo pozvati ovaj dodatak, i mnogi programeri praktikuju ponovno prikazivanje reklame kada se završi neki ciklus u aplikaciji i/ili kada se napušta aplikacija. Prikazivanje reklame tipa ‘Banner’ se osvežava posle intervala koji se bira kada se kreira oglas na AdMob sajtu (obicno je 60 s). Neki programeri ostavljaju baner na ekranu stalno dok radi aplikacija, dok neki u zavisnosti od toga šta se radi u aplikaciji prikazuju i skrivaju baner. Prikazivanje i sakrivanje banera se radi veoma lako – korišćenjem naredbi ‘showBanner()’ i ‘hideBanner()’, i preporuka je da ne bi stalno pisali u programu ove naredbe uvesti jedno stanje sa nazivom poput ‘ShowAd’, i dodati kod koji na svakih nekoliko sekundi proverava ovo stanje i prikazuje ili sakriva reklamu. Ovo rešenje je mnogo bolje od stalnog pozivanja na odgovarajucim mestima u programu, jer ne možete u potpunosti da kontrolišete dodatak za monetizaciju, a desi se da reklama zakasni i pojavi se posle naredbe za sakrivanje, a retko ko postavi ikonu na koju kada se klikne, dolazi do sakrivanja reklame. Nepažljivim programerima se desi da ta reklama prekrije važne komande za funkcionisanje aplikacije, tako da aplikacija postaje neupotrebljiva.

U narednim linijama dat je opis kojim se najlakše implementiraju, pozivaju i skrivaju reklame u Flash-u koje koriste monetizaciju dodatkom AdMobAne.

Najpre se skine dodatak ‘.zip’ i raspakuje u folderu sa glavnim ‘***.fla’ fajlom. Potrebni folder za dodatak je ovde sa nazivom ‘anes’ u kome se nalaze sledeci fajlovi:

AdMobAne1.0.ane
SingleBanner.as
Interstitial.as

Pomenuti ‘AdMobAne1.0.ane’ fajl je obavezan i ne možete ga menjati, dok je kod za ostala dva fajla i kod u glavnom ‘***.fla’ fajlu dat tako da bude najshvatljiviji, i može se menjati po potrebi. U opcijama Flash-a morate dodati putanju ka ovom ‘AdMobAne1.0.ane’ dodatku ‘File / Publish Settings… / ActionScript Settings / Browse to a Native extension’.

Glavni ***.fla

import com.admob.AdMobManager;
import anes.SingleBanner;
import anes.Interstitial;

try {
var AdMobInterstitial:Interstitial = new Interstitial();
var AdMobBanner:SingleBanner = new SingleBanner();
}
catch (error:Error) {
// error
}
var Mode:String = “Show”;
setTimeout(ShowHideAdMobBanner, 1000);

function ShowHideAdMobBanner():void {
if (Mode == “Show”) {
AdMobBanner.ShowBanner();
}
else {
AdMobBanner.HideBanner();
}
setTimeout(ShowHideAdMobBanner, 1000);
}

function AdMobShowInterstitial():void {
AdMobInterstitial.ShowInterstitial();
}
setTimeout();

Kada je potrebno samo u okviru glavnog ‘***.fla’ fajla pozovete funkciju:

AdMobShowInterstitial();

Odnosno postavite vrednost za prikaz banera:

Mode = “Show”; // “Hide”

SingleBanner.as

package anes {

import com.admob.*;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFormat;

public class SingleBanner extends Sprite {

public static const banner_id:String = “ca-app-pub-xxx/yyy”;
private var adMobManager:AdMobManager;

public function SingleBanner() {

super();
adMobManager = AdMobManager.manager;
if(adMobManager.isSupported){
adMobManager.verbose = true;
adMobManager.bannersAdMobId = banner_id;
adMobManager.createBanner(AdMobSize.SMART_BANNER_LAND, AdMobPosition.BOTTOM_CENTER, “BottomBanner”, null, true);
}
}

public function ShowBanner() {

if(adMobManager.isSupported) {
adMobManager.showAllBanner();
}
}

public function HideBanner() {

if(adMobManager.isSupported){
adMobManager.hideAllBanner();
}
}
}
}

Na predvidjeno mesto mora se uneti broj reklame koja prikazuje baner.

Interstitial.as

package anes {

import com.admob.AdMobManager;
import flash.display.Sprite;
import flash.utils.*;

public class Interstitial extends Sprite {

public static const full_id:String = “ca-app-pub-xxx/xxx”;
private var adMobManager:AdMobManager;
private var isShow:Boolean = false;
private var waiting:Boolean = false;

public function Interstitial() {

super();
adMobManager = AdMobManager.manager;
if (adMobManager.isSupported) {
adMobManager.verbose = true;
adMobManager.interstitialAdMobId = full_id;
adMobManager.createInterstitial(null, true);
}
}

public function ShowInterstitial() {

if(adMobManager.isSupported) {
if (!waiting) {
waiting = true;
if(adMobManager.isInterstitialLoaded()) {
WaitData();
}
else {
adMobManager.cacheInterstitial();
setTimeout(WaitData, 3000);
}
}
}

function WaitData():void {

if(adMobManager.isInterstitialLoaded()) {
waiting = false;
adMobManager.showInterstitial();
}
else {
setTimeout(WaitData, 3000);
}
}
}
}
}

Na pedvidjeno mesto mora se uneti broj reklame koja prikazuje Interstitial sadrzaj.

Fajlove ‘SingleBanner.as’ i ‘Interstitial.as’ kreirajte sami slično kao i ja ili iskoristite gotove fajlove koji su dati u primeru, uz minimalno prilagođavanje, a za fajl ‘.ane’ ne zaboravite da podesite u podešavanjima putanju ka ovom ‘.ane’ fajlu, kao i verziju za izvršavanje programa za android na 15.0 ili više.

Potrebno je dodati i dozvole u ‘File / Publish Settings… / Player Settings / Permissions’ i ja selektujem prve i poslednje 2 iz menija – prikaz u ‘***-.xml’ fajlu.
Potrebno je ovde i kreirati Vaš sertifikat sa šifrom, koji mora da se koristi pri reviziji aplikacije, a ovde se unose i verzija aplikacije, podržani jezici i ikone.

Takođe je potrebno posle prvog eksportovanja izmeniti fajl ‘***-app.xml’ fajl i tamo dodati redove bez kojih reklame neće da rade.

<application>
<meta-data android:name=”com.google.android.gms.version” android:value=”4452000″ />
<activity android:name=”com.google.android.gms.ads.AdActivity” android:configChanges=”keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize”/>
</application>

Dodajte i red za minimalnu verziju android operativnog sistema na kome funkcioniše program, jer će Vam Google izbaciti u protivnom upozorenje da se podaci ne poklapaju. Dodajte zato red u fajlu ‘***-app.xml’:

<uses-sdk android:minSdkVersion=”10″/>

Linije za izvršavanje dodatka za monetizaciju takođe moraju se naći u ‘***-app.xml’, jer bez njih reklame neće da rade.

<extensions>
<extensionID>com.admob.ane</extensionID>
</extensions>

Tek kada sve ovo završite, možete kreirati naredbom ‘publish’ fajl koji se učitava na androidima tipa ‘.apk’, čije funkcionisanje obavezno trebate proveriti na svom android uređaju. Nakon kreiranja ‘.apk’ fajla morate proveriti da li je novi ‘***-app.xml’ izmenjen i da li na kraju izgleda ovako:

<allowBrowserInvocation>false</allowBrowserInvocation>
<android>
<manifestAdditions>
<![CDATA[<manifest>
<uses-sdk android:minSdkVersion=”10″/>
<uses-permission android:name=”android.permission.INTERNET”/>
<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>
<uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE”/>
<uses-permission android:name=”android.permission.ACCESS_WIFI_STATE”/>
<application>
<meta-data android:name=”com.google.android.gms.version” android:value=”4452000″ />
<activity android:name=”com.google.android.gms.ads.AdActivity” android:configChanges=”keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize”/>
</application>
</manifest>]]>
</manifestAdditions>
</android>
<supportedLanguages>en zh cs nl fr de it ja ko pl pt ru es sv tr</supportedLanguages>
<extensions>
<extensionID>com.admob.ane</extensionID>
</extensions>
</application>

Ako je Flash izmenio ‘.xml’ ispavite ga ponovo po gornjem primeru, a zatim ponovo kreirajte ‘.apk’, ali prethodno proverite sve podatke ponovo…

Ovako formirana ‘.apk’ verzija radi kako treba, i prikazuje reklame kako je predviđeno. Još samo da bude mnogo instalacija tj. klikova i blago Vama…

 


 

web monetization


Android Zarada – Monetizacija

 

Android Zarada

 Android Zarada – Uvod

Android Zarada – Pravilan Početak

Android Zarada – Saveti Za Optimizaciju

Android Zarada – Reklame

Android Zarada – Monetizacija

Android Zarada – Marketing

феб 072015
 

Android je platforma za koju su mnogi programski jezici napravili dodatke da rade u njoj. Osnovni paket koji podrzavaju androidi ima ekstenziju ‘.apk’ koja je poput ‘.zip’ paketa zapakovani skup više foldera i fajlova sa raznim ekstenzijama. U okviru ‘.apk’ paketa se nalaze svi zapakovani fajlovi koji služe za instaliranje i pokretanje neke aplikacije.

Osnovni programski jezik koji android podržava je Java, ali pomoću raznih programskih jezika se pravi pomenuti ‘.apk’ paket, koji u sebi moze da ima objašnjenja kako da rade i drugi programski jezici. Da bi se prikazao sadržaj koji je planiran nekim drugim programskim jezikom, potrebno je u ‘.apk’ paket dodati i ‘player’ za reprodukciju tog sadržaja, pa mnogi programski jezici u svaku aplikaciju dodaju ‘player’ koji obično zauzima do 10 MB, sto povećava memoriju potrebnu za aplikaciju (kao što radi Unity3d). Većina korisnika nemaju pojma da je to urađeno, već samo instaliraju aplikaciju i koriste je ne obraćajuci pažnju na bilo šta drugo sem na to da li aplikacija radi i da li im se sviđa. Da bi uštedeli memoriju, neki programski jezici su napravili svoj univerzalni ‘player’ koji se instalira samo jednom, a nakon toga ga koriste sve aplikacije koje koriste taj programski jezik. Takav je ‘Adobe Air Player’ – aplikacija za reprodukciju Adobe Flash ‘.swf’ sadržaja poput ‘Adobe Flash Player’-a za reprodukciju ‘.swf’ sadržaja preko interneta – dodatak za pregledače sadržaja na internetu koga ima skoro svaki kompjuter na svetu. Međutim mnogi ljudi iz svog neznanja smatraju da je ‘Adobe Air‘ virus i kada neka aplikacija traži prvi put na njihovom uređaju da se taj paket instalira, ne prihvataju ga i komentarišu da aplikacija ima virus. Iako neke druge aplikacije imaju već ugradjen taj paket u sebi, ali samo za sebe, oni to ne znaju, i tada je sve u redu. Za njih nema veze što se u svakoj aplikaciji utroši novih 10 MB, važno je da nema obaveštenja o virusu…

Sa programerske strane, javlja se velika dilema: da li praviti aplikacije sa uštedom memorije i pozivom glavnog paketa za reprodukciju sa rizikom da aplikacija dobije loše ocene i bude komentarisana da ima virus, ili dodati u svaku aplikaciju dodatak za reprodukciju sadržaja, sa povećanjem memorije, o čemu obični korisnici nemaju pojma. U poslednje vreme ja sam se opredelio za ovaj drugi slučaj, zbog više negativnih komentara o postojanju virusa, koji narušavaju opšti utisak o kvalitetu aplikacije.

Upoređenje memorije za istu aplikaciju snimljenu bez dodatka i sa dodatkom za reprodukciju bi bilo sledeće: verzija iz prvog slučaja zauzima oko 3 MB zapakovana a oko 6 – 7 MB raspakovana, dok ista verzija po drugoj metodi funkcionisanja zauzima oko 13 MB zapakovana a preko 30 MB raspakovana. Prevelika šteta za korisnika, ali prevelika korist za programera čija ocena bude za jedan umanjena na primer čak 3.5 umesto 4.5, što utice na druge korisnike da preuzmu tu aplikaciju i konačni uspeh aplikacije! Svaki programer može da izabere kako da uradi konačni paket, a svaki korisnik može da oceni rad, i da svoj komentar ako želi.

Što se tiče dodatka za monetizaciju, ovde je priča drugačija. Dodatak za monetizaciju je urađen tako da samo radi na platformama sa android operativnim sistemom, i poziva se iz Jave. Da bi ugradili monetizaciju u neku aplijaciju, potrebno je dodati dodatak koji poziva java funkciju koja prikazuje reklamu. Ovaj dodatak učitava reklamu sa identifikacijom programera, prikazuje je i ako kliknete na reklamu donosi predviđenu zaradu programeru. U zavisnosti od lokacije gde se nalazi korisnik i vrste aplikacije, pomenuti dodatak bira jednu od reklama, i ako je sve u redu posle prikaza reklame, bez obzira da li ste kliknuli na reklamu i videli šta Vam se nudi ili samo ugasili reklamu, glavna aplikacija nastavlja sa radom, kao da ništa nije bilo.

Ponovo napominjem da su ove reklame uglavnom jedini prihod programerima besplatnih aplikacija, i klik na njih predstavlja izražavanje zahvalnosti programerima. Kada niko ne bi kliknuo reklamu, ili kada bi bio premali broj klikova, prestalo bi objavljivanje besplatnih aplikacija, pa se Vi upitajte, da li Vam se isplati da se prikaže reklama, ili više volite da platite 2 – 3 € po aplikaciji i da nema ugrađenih reklama. Mnogi programeri čak i nude mogućnost izbora, tj. kupovinu istovetnih aplikacija u koje nisu ugrađene reklame.

Za skoro sve probleme se nadje rešenje. Naš narod voli da sve bude besplatno, najboljeg kvaliteta, da nema reklama niti bilo kakvih smetnji i da sve radi glatko. Čak se mnogi i bune ako im bilo šta nije po volji, a nikada nisu dali ni cent. Ko misli da može da nadje bolje rešenje od postojećeg, neka proba da iznese svoje teorije. Bilo bi divnih ideja koje bi izazvale puno smeha, a ustvari ko zna, mozda se nađe i novi Tesla…

Android Zarada – Reklame

 

Android Zarada

 Android Zarada – Uvod

Android Zarada – Pravilan Početak

Android Zarada – Saveti Za Optimizaciju

Android Zarada – Reklame

Android Zarada – Monetizacija

Android Zarada – Marketing

окт 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

окт 302014
 

FLASH MAHER

 

Adobe Flash Professional – Univerzalna knjiga

ACTION SCRIPT 3.0

 

DOGAĐAJI

 

FLASH MAHER – DOGAĐAJI

 

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.

import flash.display.Sprite;

import flash.events.TimerEvent;

var Step:int = 2;

var Circle:Shape = new Shape();

Circle.x = Circle.y = 200;

Circle.graphics.beginFill(0x000000);

Circle.graphics.drawCircle(0, 0, 100);

Circle.graphics.endFill();

stage.addChild(Circle);

var NewTimer:Timer = new Timer(30);

NewTimer.addEventListener(TimerEvent.TIMER, MoveCircle);

NewTimer.start();

function MoveCircle(event:TimerEvent):void {

if(Circle.x == 100 || Circle.x == 450) {

Step *= -1;

}

Circle.x += Step;

event.updateAfterEvent();

}

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

BodyMatrix.createGradientBox(20, 20, 0, 275 – 150 * Math.cos(360 / 12 * Id * Math.PI / 180)-10, 200 – 150 * Math.sin(360 / 12 * Id * Math.PI / 180)-10);

AnalogClok.graphics.beginGradientFill(“radial”, [0xdddddd, 0x333333], [1, 1], [0, 255], BodyMatrix, “repeat”, “rgb”, 0);

AnalogClok.graphics.drawCircle(275 – 150 * Math.cos(360 / 12 * Id * Math.PI / 180), 200 – 150 * Math.sin(360 / 12 * Id * Math.PI / 180), 10);

AnalogClok.graphics.endFill();

AnalogClok.filters = [Glow, Shadow];

stage.addChild(AnalogClok);

}

function CreateClockWise(ClockWiseName, WiseColor, Length, Width):void {

ClockWiseArray[ClockWiseName] = new MovieClip();

ClockWiseArray[ClockWiseName].graphics.lineStyle(2, 0x000000, 1);

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

BodyMatrix.createGradientBox(2 * Width, Length, 0, -Width, 0);

ClockWiseArray[ClockWiseName].graphics.beginGradientFill(“linear”, [0xaaaaaa, WiseColor, 0xaaaaaa], [1, 1, 1], [40, 128, 215], BodyMatrix, “repeat”, “rgb”, 0);

ClockWiseArray[ClockWiseName].graphics.drawEllipse(-Width / 2, 0, Width, -Length);

ClockWiseArray[ClockWiseName].graphics.drawCircle(0, -Length, Width);

ClockWiseArray[ClockWiseName].graphics.endFill();

ClockWiseArray[ClockWiseName].x = 275;

ClockWiseArray[ClockWiseName].y = 200;

ClockWiseArray[ClockWiseName].filters = [Shadow];

stage.addChild(ClockWiseArray[ClockWiseName]);

}

var ClockWiseArray:Array = new Array();

CreateClockWise(“HoursWise”, 0x0000ff, 80, 30);

CreateClockWise(“MinutesWise”, 0x00ff00, 110, 20);

CreateClockWise(“SecondsWise”, 0xff0000, 140, 10);

var FastTimer:Timer = new Timer(30);

FastTimer.addEventListener(TimerEvent.TIMER, ShowTime);

FastTimer.start();

function ShowTime(event:TimerEvent):void {

Now = new Date();

DigitalClock.text = Now.date > 9 ? String(Now.date) + “.”: “0” + String(Now.date) + “.”;

Now.month + 1 > 9 ? DigitalClock.appendText(String(Now.month + 1)): DigitalClock.appendText(“0” + String(Now.month + 1));

DigitalClock.appendText(“.” + Now.fullYear + “. “);

Now.hours > 9 ? DigitalClock.appendText(String(Now.hours) + “:”): DigitalClock.appendText(“0” + String(Now.hours) + “:”);

Now.minutes > 9 ? DigitalClock.appendText(String(Now.minutes) + “:”): DigitalClock.appendText(“0” + String(Now.minutes) + “:”);

Now.seconds > 9 ? DigitalClock.appendText(String(Now.seconds)): DigitalClock.appendText(“0” + String(Now.seconds));

Now.hours > 12 ? ClockWiseArray[“HoursWise”].rotation = (Now.hours – 12) * 360 / 12: ClockWiseArray[“HoursWise”].rotation = Now.hours * 360 / 12;

ClockWiseArray[“HoursWise”].rotation += Now.minutes / 60 * 360 / 12;

ClockWiseArray[“MinutesWise”].rotation = Now.minutes * 360 / 60 + Now.seconds / 60 * 360 / 60;

ClockWiseArray[“SecondsWise”].rotation = Now.seconds * 360 / 60;

event.updateAfterEvent();

}

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.

import flash.events.KeyboardEvent;

import flash.text.TextField;

var ShowTextField:TextField = new TextField();

ShowTextField.width = stage.stageWidth;

ShowTextField.height = stage.stageHeight;

stage.addChild(ShowTextField);

ShowTextField.addEventListener(KeyboardEvent.KEY_DOWN, KeyIsPressed);

function KeyIsPressed(event:KeyboardEvent):void {

ShowTextField.text = event.charCode.toString();

ShowTextField.appendText(“\nkeyDownHandler: ” + event.keyCode);

ShowTextField.appendText(“\nctrlKey: ” + event.ctrlKey);

ShowTextField.appendText(“\nkeyLocation: ” + event.keyLocation);

ShowTextField.appendText(“\nshiftKey: ” + event.shiftKey);

// ShowTextField.appendText(“\naltKey: ” + event.altKey.toString()); // Error

}

Isti je postupak i za pisanje koda za događaj kada se taster pusti:

SomeTextField.addEventListener(KeyboardEvent.KEY_UP, KeyIsReleased);

Primer 4: Pomeranje objekta strelicama!

import flash.text.TextField;

import flash.events.KeyboardEvent;

import flash.display.MovieClip;

var KeyTarget:MovieClip = new MovieClip();

KeyTarget.graphics.lineStyle(2, 0x000000, 1);

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

KeyTarget.graphics.drawCircle(0, 0, 30);

KeyTarget.graphics.endFill();

KeyTarget.x = 275;

KeyTarget.y = 200;

stage.addChild(KeyTarget);

var Left:int = 0;

var Right:int = 0;

var Up:int = 0;

var Down:int = 0;

var InputField:TextField = new TextField();

InputField.addEventListener(KeyboardEvent.KEY_DOWN, KeyDown);

InputField.addEventListener(KeyboardEvent.KEY_UP, KeyUp);

function KeyDown(event:KeyboardEvent):void {

switch(event.keyCode) {

case 37:

Left = 1;

break;

case 39:

Right = 1;

break;

case 38:

Up = 1;

break;

case 40:

Down = 1;

break;

default:

break;

}

}

function KeyUp(event:KeyboardEvent):void {

switch(event.keyCode) {

case 37:

Left = 0;

break;

case 39:

Right = 0;

break;

case 38:

Up = 0;

break;

case 40:

Down = 0;

break;

default:

break;

}

}

var FastTimer:Timer = new Timer(20);

FastTimer.addEventListener(TimerEvent.TIMER, StageFocus);

FastTimer.start();

function StageFocus(event:TimerEvent):void {

stage.focus = InputField;

InputField.text = “”;

KeyTarget.x += Right – Left;

KeyTarget.y += Down – Up;

event.updateAfterEvent();

}

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.

import flash.events.*;

stage.addEventListener(MouseEvent.CLICK, ClickOnStage);

function ClickOnStage(event:MouseEvent):void {

trace(“New click.”);

trace(“x=” + stage.mouseX + ” y=” + stage.mouseY);

}

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.

import flash.events.*;

stage.addEventListener(MouseEvent.CLICK, ClickOnStage);

function ClickOnStage(event:MouseEvent):void {

stage.removeEventListener(MouseEvent.CLICK, ClickOnStage);

trace(“Event is removed.”);

}

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

var Circle:Sprite = new Sprite();

Circle.x = Circle.y = 200;

Circle.graphics.beginFill(0x000000);

Circle.graphics.drawCircle(0, 0, CurrentSize);

Circle.graphics.endFill();

Circle.doubleClickEnabled = true;

stage.addChild(Circle);

Circle.addEventListener(MouseEvent.CLICK, ChangeColor);

Circle.addEventListener(MouseEvent.MOUSE_WHEEL, ChangeSize);

Circle.addEventListener(MouseEvent.DOUBLE_CLICK, Animation);

Circle.addEventListener(MouseEvent.MOUSE_OUT, RemoveShadow);

Circle.addEventListener(MouseEvent.MOUSE_OVER, ShowShadow);

function ChangeColor(event:MouseEvent):void {

CurrentColor = Math.random() * 256 * 256 * 256;

Circle.graphics.clear();

Circle.graphics.beginFill(CurrentColor);

Circle.graphics.drawCircle(0, 0, CurrentSize);

Circle.graphics.endFill();

}

function ChangeSize(event:MouseEvent):void {

CurrentSize += event.delta; // default: event.delta = 3

Circle.graphics.clear();

Circle.graphics.beginFill(CurrentColor);

Circle.graphics.drawCircle(0, 0, CurrentSize);

Circle.graphics.endFill();

}

function Animation(event:MouseEvent):void {

Circle.x += 10;

}

function RemoveShadow(event:MouseEvent):void {

Circle.filters = [];

}

function ShowShadow(event:MouseEvent):void {

CurrentColor = Math.random() * 256 * 256 * 256;

Circle.filters = [Shadow];

}

Primer 5: Pogađanje slučajnog celog broja od 1 do 99!

import flash.display.*;

import flash.text.*;

var AllTextFormat:TextFormat = new TextFormat(“Geogia”, 20, 0x000000, true, false, false, null, null, TextFieldAutoSize.CENTER, null, null, null, null);

var StaticTextField:TextField = new TextField();

StaticTextField.x = 100;

StaticTextField.y = 50;

StaticTextField.width = 350;

StaticTextField.height = 50;

StaticTextField.defaultTextFormat = AllTextFormat;

StaticTextField.text = “Click on stage to start…”;

stage.addChild(StaticTextField);

var AnswerTextField:TextField = new TextField();

AnswerTextField.x = 100;

AnswerTextField.y = 250;

AnswerTextField.width = 350;

AnswerTextField.height = 150;

AnswerTextField.multiline = true;

AnswerTextField.defaultTextFormat = AllTextFormat;

stage.addChild(AnswerTextField);

var InputTextField:TextField = new TextField();

InputTextField.x = 225;

InputTextField.y = 150;

InputTextField.width = 100;

InputTextField.height = 50;

InputTextField.border = true;

InputTextField.borderColor = 0x0000ff;

InputTextField.defaultTextFormat = AllTextFormat;

InputTextField.restrict = “0-9”;

InputTextField.maxChars = 2;

InputTextField.type = TextFieldType.INPUT;

stage.addChild(InputTextField);

var MyNumber:int;

var YourMove:int;

stage.addEventListener(MouseEvent.CLICK, Start);

function Start(event:MouseEvent):void {

stage.removeEventListener(MouseEvent.CLICK, Start);

MyNumber = int(Math.random() * 98.99 + 1);

YourMove = 0;

StaticTextField.text = “Find my random number (1-99)!”;

InputTextField.text = “?”;

AnswerTextField.text = “Insert number in box…\n And press ‘ENTER’…”;

InputTextField.addEventListener(KeyboardEvent.KEY_DOWN, KeyDownHandler);

}

function KeyDownHandler(event:KeyboardEvent):void {

if(event.keyCode == 13) {

CheckAnswer();

}

}

function CheckAnswer():void {

YourMove ++;

AnswerTextField.text = “Move: ” + String(YourMove) + ” => ” + InputTextField.text + “\n”;

if(int(InputTextField.text) == MyNumber) {

InputTextField.removeEventListener(KeyboardEvent.KEY_DOWN, KeyDownHandler);

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.

 

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

окт 292014
 

FLASH MAHER

 

Adobe Flash Professional – Univerzalna knjiga

ACTION SCRIPT 3.0

 

FUNKCIJE

 

FLASH MAHER – FUNKCIJE

 

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 {

trace(arguments[0] + ” ” + arguments[1] + “*”);

if(arguments[0] > 1) arguments.callee(arguments[0] – 1, arguments[1] + “*”);

}

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 ++) {

trace(“Argument[” + String(Id) + “]=” + RestArguments[Id]);

}

}

ArgumentsArray(13, 222, 456);

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.

 

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

окт 292014
 

FLASH MAHER

 

Adobe Flash Professional – Univerzalna knjiga

ACTION SCRIPT 3.0

 

OPERATORI I USLOVNE NAREDBE

 

FLASH MAHER – OPERATORI I USLOVNE NAREDBE

 

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

 

Primer 2. Prikaz teksta na ekranu!

 

Primer: Metoda 1.

import flash.text.*;

import flash.filters.*;

/* Comments

TextFormat(font:String = null, size:Object = null, color:Object = null, bold:Object = null, italic:Object = null, underline:Object = null, url:String = null, target:String = null, align:String = null, leftMargin:Object = null, rightMargin:Object = null, indent:Object = null, leading:Object = null)

Comments */

var NewTextFormat:TextFormat = new TextFormat(“Geogia”, 50, 0xff0000, true, false, false, null, null, TextFieldAutoSize.CENTER);

var ExampleTextField:TextField = new TextField();

ExampleTextField.x = ExampleTextField.y = 100;

ExampleTextField.width = 300;

ExampleTextField.height = 200;

ExampleTextField.background = true;

ExampleTextField.backgroundColor = 0x888888;

ExampleTextField.defaultTextFormat = NewTextFormat;

ExampleTextField.text = “Example…\nNew row…”;

stage.addChild(ExampleTextField);

 

Primer: Metoda 2.

import flash.display.*;

import flash.text.*;

var NewTextExample:TextField = new TextField();

NewTextExample.x = NewTextExample.y = NewTextExample.width = NewTextExample.height = 100;

NewTextExample.background = true;

NewTextExample.backgroundColor = 0x888888;

NewTextExample.wordWrap = true;

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

CssData += “h1 { font-family: Arial, Helvetica, _sans; font-size: 20; color: #FFFFCC; font-weight: bold; } .bluetext { color: #0000CC; }”;

var CssStyleSheet:StyleSheet = new StyleSheet();

CssStyleSheet.parseCSS(CssData);

CssTextField.styleSheet = CssStyleSheet;

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.

 

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

окт 282014
 

FLASH MAHER

 

Adobe Flash Professional – Univerzalna knjiga

ACTION SCRIPT 3.0

 

UVOD

 

FLASH MAHER – UVOD

 

Kao što mi razumemo svoj jezik, i kompjuter razume svoj jezik. Cilj programiranja je da napišemo program – kod pomoću koga možemo da prenesemo ono što je nama jasno na našem jeziku, na jezik koji razume računar. Program je niz instrukcija koje računar traba da sprovode. Adobe Flash Professional koristi programski jezik ActionScript 3.0.
ActionScript 3.0 ima pravila koja su veoma lako prihvatljiva. Veoma je sličan engleskom jeziku, ali pošto kompjuter nema mozak kao čovek, da bi program radio onako kako mi želimo, mora se poštovati predviđena sintaksa. Adobe je ugradio nekoliko vrsta pomoći pri pisanju programa – koda, kao i prozore za ispis grešaka (COMPILER ERRORS), izlaznih vrednosti po želji (OUTPUT) i otklanjanje neispravnosti (DEBUG CONSOLE). Sve ovo Vam pomaže da stalno testirate i ispravljate sintaksne greške, a i greške u programiranju u hodu, dok Vam program napreduje. Zato stalno testirajte delove programa koje dodajete, jer se tako lakše otklanjaju moguće greške.

Kako se započinje stvaranje programa u Flash-u? Startovanjem na ikonu Flash.exe otvara se prozor u kome birate šta želite da radite u Flash-u. Za početak izaberite New Document sa ikonom ’Fl’ Action Script 3.0, koji Vam otvara okruženje u kome možete i da dizajnirate – crtate ili animirate na pozornici ’stage’ i da programirate u prozoru u kome se piše AS3.0 kod. Da bi programirali morate da aktivirate (ako nije aktiviran) prozor ’ACTIONS – FRAME’, koji se aktivira pritiskom na ’F9’ ili iz glavnog menija na Window > Actions. Na Window se aktiviraju/deaktiviraju i svi ostali prozori koji Vam pomažu u radu, koje možete razmestiti po ekranu kako Vam odgovara. Kada naučite razmeštanje ovih prozora i dođete do zaključka koji Vam raspored – radni prostor najviše odgovara, možete da snimite ovaj radni prostor na Window > Workspace > New Workspace… i zadate mu ime koje želite. Ovo ime će se pojaviti u listi Window sa ostalim radnim prostorima koje Flash nudi (na primer Developer, Animator, Classic i slično).

Dok kreirate u Flash-u vi stvarate program sa ’.fla’ ekstenzijom, i kada snimite svoj program, snima se sa tom ekstenzijom. Ovaj tip fajla zapisuje sve što radite, i animacije i podešavanja i kod, i omogućuje Vam ispravke svega, a njegovim startovanjem se stvara automatski fajl sa ’.swf’ ekstenzijom koji se reprodukuje kroz Flash Player. Startovanje programa ili testiranje se izvršava kada u glavnom meniju kliknete na Control > Test Movie (in Flash Professional) ili (Control + Enter).
Pisanje koda u AS3.0 nije za podcenjivanje. Nije dovoljno samo poznavati sintaksu i pravila, već morate svoju zamisao sprovesti od samog pisanja koda, preko organizacije i povezivanja svih delova u jednu celinu, do objavljivanja krajnjeg rešenja koje se na odgovarajući način izvršava. Kod se unosi u panelu Actions, koji važi za frejm ‘frame’ koji je trenutno selektovan, ili u posebnom prozoru za pisanje AS3.0 koda, o čemu će biti reči kasnije. Svaki frejm može imati svoj kod, koji se izvršava kada prikaz filma koji Flash reprodukuje dođe do njega. Flash Vam nudi kontrolu izvršavanja frejmova uz pomoć naredbi: stop(), gotoAndStop(frame), gotoAndPlay(frame) i druge.
Actions panel je prilagodljiv Vašim potrebama i sastoji se iz vise delova:
– Panel alata (Toolbox) sadrži listu svih metoda, svojstava i događaja koji su organizovani u direktorijume.
– Prozor za izbor skripte sadrži prikaz scena i simbola i nudi nam prečicu ka izboru nosioca skripte.
– Meni sa opcijama služi za formatiranje Actions panela.
– Čarobni štapić, skript asistent i dugme ‘Help’ (pomoć) su veoma korisni za nalaženje gotovog koda i raznih objašnjenja.
– Pomoćne ikone služe za ostvarivanje raznih pomoći (dodavanja koda, pretrage, nalaženja mete, provere sintakse, auto formatiranja, traženja grešaka, sažimanja, komentarisanja i slično).

Na početku će biti dovoljno automatsko prepoznavanje koda koje je ugrađeno u Flash, a vremenom se opcije jedna po jedna razjašnjavaju.
Prilikom korišćenja posebnog prozora za pisanje AS3.0 koda, kada selektujete umesto otvaranja ‘.fla’ dokumenta samo ‘ActionScript File’ koji stvara ekstenziju ‘.as’, rad je ekvivalentan kao sa Actions panelom, s tim da se ovako kodirani fajl snima kao posebni tekstualni podatak, i mora specijalno i da se pozove da bi se izvršio. ‘As’ fajl može da se edituje bilo kojim tekstualnom editorom, i on je veoma bitan jer nam pomaže u stvaranju objektnog programiranja i rasterećivanja glavnog programa na manje delove radi lakše kontrole i preglednosti. ‘As’ fajlovi se kompajliraju automatski u konačni ‘swf’ fajl, tako da ne moraju da se uploaduju na hosting, već služe samo pri pravljenju glavnog ‘swf’ fajla.
AS3.0 ima pravila – sintaksu koja se mora poštovati kada se piše kod. Najmanji problem je ako napravite sintaksnu grešku, jer pri testiranju programa Flash najpre proverava sintaksu, i ako greške postoje ispisuje izveštaj, sa brojem redova u kojima se nalaze greške.
AS3.0 se sastoji od niza izjava, koje stvaraju određene akcije. Najčešće se piše jedna izjava u jednom redu, i na kraju izjave stoji znak ’;’.
Kada je potrebno ubacite komentare u svoj kod uz pomoć ’//’ za jedan red ili ’/*…code…*/’ za komentare delova koda u jednom ili u više redova.
// This is comment
/* And this is comment…
…multi line comment.*/

 

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