
Citrus Engine este un game engine de tip platforma sidescrolling realizat in ActionScript 3.0 avand ca motor fizic Box2D.
De curand Citrus Engine este oferit gratuit pentru scopuri educationale. Asa ca daca esti student, profesor sau doar daca vrei sa folosesti un game engine in scopuri educative poti sa folosesti cu incredere Citrus Engine.
Cei care vor sa scoata profit de pe urma jocurilor create cu Citrus Engine pot cumpara licenta.
ActionScript 3.0 suporta “Programarea Orientata pe Obiecte” (Object Oriented Programming OOP).
Hai sa vedem cum se face declararea unei clase in ActionScript 3.0 si cum arata metodele si proprietatile clasei.
package { public class Bomboana { //Constructor public function Bomboana(numeBomboana:String) { nume=numeBomboana; } //Proprietati public var nume:String; public var culoare:String; //Metode public function seteazaCuloarea(culoareBomboana:String):void{ culoare=culoareBomboana; } public function afiseazaBomboana():String{ trace("Bomboana cu numele "+nume+" are culoarea "+culoare); } } }
Sa ne gandim la o clasa ca la o forma de bomboane. Cu o forma de bomboane putem sa facem mai multe bomboane (la fel sau diferite prin culoare, marime, gust,etc). Bomboanele astfel create se numesc obiecte (instante ale clasei).
Folosind clasa de mai sus haideti sa realizam doua bomboane diferite. Una sa fie o bomboana cu gust de capsuni si alta mentolata.
//Definim cele doua bomboane si le dam nume apeland constructorul clasei. var bomboana1:Bomboana = new Bomboana("BomboanaCapsuni"); var bomboana2:Bomboana = new Bomboana("BomboanaMenta"); //Stabilim culoarea bomboanelor apeland metoda seteazaCuloarea(). bomboana1.seteazaCuloarea("rosu"); bomboana2.seteazaCuloarea("verde"); //Afisam cele 2 bomboane apeland metoda afiseazaBomboana(). bomboana1.afiseazaBomboana(); bomboana2.afiseazaBomboana(); //Modificam culoarea primei bomboane modificand direct proprietatea "culoare" si apoi o afisam. bomboana1.culoare="galben"; bomboana1.afiseazaBomboana();
Codul de mai sus va face sa apara in output-ul debug urmatoarele:
Bomboana cu numele BomboanaCapsuni are culoarea rosu Bomboana cu numele BomboanaMenta are culoarea verde Bomboana cu numele BomboanaCapsuni are culoarea galben
Daca declaram proprietatea “culoare” drept private si nu public atunci accesul la ea se putea face doar in interiorul clasei nu si din afara (valabil si pentru metode).
Prin acest articol nu doresc sa prezint toate conceptele programarii orientata pe obiecte ci doar un minim de cunostinte pe larg si cum apar ele in ActionScript 3.0 si faptul ca se aseamana destul de mult cu alte limbaje de programare.
Functiile sunt bucati de cod care pot fii reutilizate oricand in cod sau operatii customizate in ActionScript. In acest tutorial vom invata cum se declara o functie in ActionScript si cum putem utiliza respectiva functie.
Pe langa functii mai exista si metode ale claselor. Sunt doua termene diferite dar care se aseamana destul de mult. Vom invata despre metode in alt tutorial cand vom discuta despre clase.
In tutorialul Hello World! in FlashDevelop
am declarat functia principala HelloWorld() care are acelasi nume ca al clasei si care de fapt este un constructor. Ideea este ca atunci cand avem un fisier ActionScript(.as) si vrem sa il folosim ca sine statator adica sa il compilam si sa il rulam trebuie neaparat sa avem aceasta functie principala. Pe langa functia principala putem crea cate functii vrem si le putem apela fie din functia principala fie in interiorul altor functii.
O functie o vom declara in general in felul urmator:
1 2 3 4 | function numeFunctie(argument):tipulReturnat { declaratii; } |
Haideti acum sa gandim o functie care primeste doi parametri(numere), calculeaza suma si o afiseaza in debug output (trace).
1 2 3 4 5 6 | function suma(a:Number, b:Number):void { var s:Number; //Declaram variabila care va retine suma celor doi parametri. s=a+b; //Calculam suma. trace("Suma este: " + s); //Afisam suma. } |
Dar aceasta functie efectiv nu face nimic daca nu o si folosim.
In continuare vom crea un fisier “Main.as” si vom folosi aceasta functie.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package { import flash.display.Sprite; public class Main extends Sprite { public function Main() { suma(4, 3); //Apelam functia si ii dam ca paramentrii numerele 4 si 3. suma(102, 8); //Putem sa apelam functia de cate ori dorim. } function suma(a:Number, b:Number):void { var s:Number; //Declaram variabila care va retine suma celor doi parametri. s=a+b; //Calculam suma. trace("Suma este: " + s); //Afisam suma. } } } |
Daca compilam si rulam programul de mai sus in output vom avea afisat:
Suma este: 7 Suma este: 110
In concluzie functiile din ActionScript 3.0 sunt asemanatoare cu cele din C/C++, PHP, Java,etc. Difera doar modul declararii lor.
In tutorialul TextField am invatat sa afisam in fereastra Flash un text.
Daca va mai aduceti aminte am folosit urmatorul cod pentru definirea acelui text:
1 2 | var mesaj:TextField = new TextField; mesaj.text="Hello Universe!"; |
Mai intai am creat o variabila cu numele “mesaj” de tipul TextField. TextField este un tip de date mai complex dar pe langa “tonele” de tipuri de date complexe din ActionScript 3.0 exista si cele simple ca numere intregi, siruri de caractere, vectori si asa mai departe.
Haideti sa declaram cele mai obisnuite tipuri de date care se folosesc in “codul cel de toate zilele”.
1 2 3 4 5 | var numar:Number = 2.5; var numarIntreg:int = -5; var sirCaractere:String = "un text"; var logic:Boolean = true; var vector:Array = [2, 4, 6]; |
Declaratiile de mai sus nu au nevoie de nici o explicatie iar sintaxa pentru declararea unei variabile este urmatoarea:
var NumeVariabila:TipVariabila = ValoareVariabila;In tutorialul trecut “Hello World! in FlashDevelop” am facut sa apara mesajul “Hello world” in fereastra de output. Dar acest lucru nu ne ajuta cu nimic atunci cand vine vorba efectiv de a afisa mesaje catre utilizatorul nostru asa ca azi vom invata despre TextField.
Ne vom folosii de codul din tutorialul trecut:
1 2 3 4 5 6 7 8 9 10 11 12 | package { import flash.display.Sprite; public class HelloWorld extends Sprite { public function HelloWorld() { trace("Hello world!"); } } } |
Prima data trebuie sa importam o clasa :
1 | import flash.text.TextField; |
Vom sterge trace(”Hello world”); deoarece nu mai este necesar si in locul ei adaugam urmatoarele:
1 2 3 | var mesaj:TextField = new TextField; mesaj.text="Hello Universe!"; stage.addChild(mesaj); |
Rulam programul si observam ca in fereastra Flash a aparut mesajul “Hello Universe!”.
Pe prima linie este creat un nou obiect de tip TextField cu numele “mesaj” pe linia a doua i se atribuie mesajul “Hello Universe!”.
Daca rulam programul in acest moment nu se intampla nimic. Avem creata o “scena” dar pe ea nu se afla nici un “actor” asa ca face ca obiectului “stage” sa i se ataseze obiectul “mesaj” prin addChild.
Alte proprietati mai importante ale TextField:
1 2 3 4 5 | mesaj.x=100; //Pozitia x este setata la 100 mesaj.y=200; //Pozitia pe y este la 200 mesaj.width=100; //Latimea mesaj.height=50; //Inaltimea mesaj.border=true //Chenar [true/false] |
Voi scrie in continuare un mic tutorial despre ActionScript 3.0 si cum poate fi folosit fara a avea nevoie de Flash IDE.
1.Instrumente
Pentru inceput vom avea nevoie de:
Toate aceste instrumente sunt free si ne dau posibilitatea sa folosim ActionScript 3.0 fara a avea nevoie de produse scumpe.
2.Configurare
Dupa ce am descarcat instrumentele de mai sus trebuie sa configuram FlashDevelop. Exista 2 moduri prin care putem configura FlashDevelop si am sa il prezint pe cel mai simplu:
3. “Hello World!”
Acum sa scriem primul nostru cod in ActionScript 3.0. Pentru inceput facem un nou proiect in FlashDevelop. Observam in directorul src fisierul Main.as. Hai sa stergem tot codul si sa redenumim fisierul in HelloWorld.as apoi sa scriem urmatorul cod:
package { import flash.display.Sprite; public class HelloWorld extends Sprite { public function HelloWorld() { trace("Hello world!"); } } }
Hai sa testam sa vedem ce se intampla. Apasati F5. Apare fereastra Flash dar din pacate este goala. Mesajul nostru a fost scris de fapt un output. Asta face comanda trace. Este folosita mai mult pentru debugging. Cam atat despre ActionScript 3.0. In urmatorul tutorial o sa trecem la treburi mai serioase.