In acest tutorial e prezentat un exemplu de creare a unei animatii simple cu ENTER_FRAME, controlata si activata prin click. Inainte de exemplu, iata pe scurt cate ceva despre Frame (cadru) si animatia cu ActionScript.
- In termeni generali, cand in Flash este executata o animatie se efectueaza urmatorul ciclu:
1. Executa codul din cadru curent
2. Face update (actualizare) la ecran
3. Trece la urmatorul cadru
4. Se repeta ciclul.
// Pachet-ul cu clasa moveRotate (miscare si rotire obiect la Click) // https://marplo.net/flash package { // Importare clase predefinite ActionSscript 3 folosite in aceasta import flash.events.*; import flash.display.MovieClip; // Start clasa moveRotate public class moveRotate { // Se declara proprietatile pt. instanta_obiectului si valorile de miscare Y, X si Rotire public var insMC:MovieClip; public var move_y:Number; // distanta miscarii pe verticala public var move_x:Number; // distanta miscarii pe orizontala public var move_r:Number; // valoarea pt. rotire, in grade // Metoda constructor // Preia ca argumente: instanta_obbiectului si valori pt. proprietati: move_y, move_x si move_r // Parametri prin care se atribue valori proprietatilor sunt declarati cu valori prestabilite, // astfel nu mai sunt obligatori la apelarea clasei public function moveRotate(insMC:MovieClip, move_y:Number=78, move_x:Number=18, move_r:Number=21) { // Se atribue valori proprietatilor (preluuate din parametri) this.insMC = insMC; this.move_y = move_y; this.move_x = move_x; this.move_r = move_r; // Inregistrare metode pt. detectare apasare si eliberare Click in Scena this.insMC.stage.addEventListener(MouseEvent.MOUSE_DOWN, jump); this.insMC.stage.addEventListener(MouseEvent.MOUSE_UP, land); } /* Se definesc functiile apelate de evenimente, ca private */ // Functia apelata la MOUSE_DOWN (click apasat) private function jump(event:MouseEvent):void { this.insMC.y -= this.move_y; // Modifica pozitia obiectului pe axa Y (micsoreaza distanta fata de marginea de sus) // Sterge inregistrare eveniment MOUSE_DOWN (ca sa faca miscarea o singura data pe click) this.insMC.stage.removeEventListener(MouseEvent.MOUSE_DOWN, jump); // Inregistrare eveniment pt. adaugare Frame (apeleaza functia flip() care face rotire si deplasare pe axa X) this.insMC.stage.addEventListener(Event.ENTER_FRAME, flip); } // Functia apelata la MOUSE_UP (click eliberat) private function land(event:MouseEvent):void { this.insMC.y += this.move_y; // Modifica in sens invers fata jump() pozitia obiectului pe axa Y // Inregistreaza din nou detectare MOUSE_DOWN (sa fie recunoscut iar apasare cliick, dupa eleberare) this.insMC.stage.addEventListener(MouseEvent.MOUSE_DOWN, jump); // Sterge inregistrare eveniment ENTER_FRAME (ca sa se opreasca din rotire la eliberare click) this.insMC.stage.removeEventListener(Event.ENTER_FRAME, flip); } // Functia apelata la ENTER_FRAME private function flip(event:Event):void { atMargin(); // Apeleaza functia care verifica daca a ajuns in marginile laterale this.insMC.rotation += this.move_r; // Roteste obiectul this.insMC.x += this.move_x; // Deplaseaza obiectul pe axa X } // Functie pentru schimbarea directiei de miscare cand obiectul ajunge la marginile laterale // Cu 2 if-uri pt. verificarea pozitiei obiectului in laturile din dreapta si stanga private function atMargin():void { // Verifica daca obiectul a ajuns in marginea din dreapta // Scazand din lungimea Scenei (this.insMC.stage.stageWidth) jumatate din lungimea obiectului (this.insMC.width/2) // (jumatate deoarece se considera obiecul MovieClip respectiv creat cu centrul de inregistrare in mijloc) if(this.insMC.x > this.insMC.stage.stageWidth-(this.insMC.width/2)) { // Seteaza distanta 'x' cu valoarea data de lungimea Scenei minus jumate din lungimea obiectului // Face negativa valoarea proprietatii de miscare orizontala (pt. a schimba directia) this.insMC.x = this.insMC.stage.stageWidth-(this.insMC.width/2); this.move_x *= -1; } // Verifica daca obiectul a ajuns in marginea din stanga (distanta 'x' mai mica decat jumatate din lungimea oiectului) if (this.insMC.x < this.insMC.width/2) { // Seteaza distanta 'x' cu valoarea data de jumatatea lungimii obiectului // Modifica valoarea proprietatii de miscare orizontala in sens invers (pozitiv / negativ) this.insMC.x = this.insMC.width/2; this.move_x *= -1; } } } }- Salvati documentul cu aceasta clasa (cu numele: moveRotate.as).
// Se creaza o instanta de obiect la clasa "moveRotate" // Ca argument trebuie numele de instanta a obiectului ce va fi animat (stea) var stea_mr:moveRotate = new moveRotate(stea); /* Setari optionale */ // Modificare valori al proprietatilor de miscare pe axa 'x', 'y' si rotire stea_mr.move_y = 80; // Distanta saltului pe verticala (in pixeli) stea_mr.move_x = 30; // Distanta miscarii pe orizontala (in pixeli) stea_mr.move_r = 28; // Unghiul de rotire // Modificare FPS (cadre/secunda) - o valoare mai mica rezulta o miscare mai inceata stage.frameRate = 15;- Valorile pentru proprietatile "move_y", "move_x" si "move_r" pot fi adaugate direct la apelarea clasei, in aceeasi ordine, dupa stage si stea (deoarece sunt specificate ca parametri in Metoda Constructor a clasei).
<input type="number" name="points" min="5" max="80" />
#id { filter:alpha(opacity=40); /* for IE */ opacity:0.4; }
var num = 12.84567; alert( num.toPrecision(3) ); // 12.8
$lang =[10=>"PHP", 20=>"JavaScript", "site"=>"coursesweb.net"); shuffle($lang); var_export($lang); // array (0=>"coursesweb.net", 1=>"PHP", 2=>"JavaScript")
She is the best in our class. - Ea este cea mai buna din clasa noastra.
Él es el mejor en nuestra clase. - El este cel mai bun din clasa noastra.