Crea uno sfondo flash animato stravagante

Due volte al mese, rivisitiamo alcuni dei post preferiti dei nostri lettori da tutta la storia di Activetuts +. Questo tutorial è stato pubblicato per la prima volta nel maggio 2009.

Usando ActionScript 3.0, creeremo uno sfondo animato che possiamo usare nelle schermate dei menu o come visualizzatore musicale.

Anteprima del risultato finale

Diamo un'occhiata a ciò a cui lavoreremo:


Passaggio 1: breve panoramica

Creeremo una classe che si prenderà cura di tutto l'effetto. Quando chiami la classe, sarai in grado di modificare il numero di luci, colori, alfa, dimensioni, direzione, velocità e la qualità del filtro Sfocatura. In questo modo è possibile ottenere molti risultati diversi quando lo si utilizza. Inoltre, puoi utilizzare qualsiasi sfondo che desideri.


Passaggio 2: il documento .fla

Creare un nuovo documento ActionScript 3.0 (File> Nuovo ...). Imposta le dimensioni dello stage alle dimensioni desiderate, ho usato 600 x 300 px.


Passo 3: il tuo background

Aggiungi o disegna un'immagine da usare come sfondo, ho usato un semplice gradiente blu (# 02C7FB, # 1F63B4).


Passaggio 4: livelli

Rinominare il primo livello in "Sfondo", quindi crearne un altro e denominarlo "Codice". È possibile bloccare il livello "Codice" per evitare il posizionamento di disegni indesiderati.


Passaggio 5: ActionScript

Salva il tuo lavoro e entriamo nel codice!

Suppongo che tu abbia già una conoscenza di base di ActionScript 3.0, se hai dubbi specifici sulle parole chiave, consulta la Guida di Flash (F1).

Creare un nuovo file ActionScript (File> Nuovo ...).


Passaggio 6: importazione delle classi richieste

pacchetto Classes / * Importa classi richieste * / import flash.display.MovieClip; import flash.filters.BitmapFilter; import flash.filters.BlurFilter; import flash.events.Event;

Qui importiamo le classi che useremo, ricordiamo che la parola accanto a "pacchetto" è il nome della cartella in cui si trova la nostra classe.


Passaggio 7: estensione della classe

// Abbiamo bisogno di estendere la classe in modo che possiamo usare il metodo addChild (). la classe pubblica Lights estende MovieClip 

Estendere la classe MovieClip consentirà alla nostra classe di ereditare tutti i metodi, le proprietà e le funzioni di MovieClip, in questo caso lo usiamo per ottenere l'accesso al metodo addChild ().


Step 8: Le variabili

Sebbene abbiano dei nomi che si spiegano da soli, aggiungerò brevi commenti su ogni var per assicurarmi che sia chiaro. Ricevono i loro valori dai parametri della funzione Main.

 luci var privateNumero: int; // Il numero di Lights on Stage private var xSpeed: int; // La velocità orizzontale che le Luci hanno private var ySpeed: int; // Vertical Speed ​​private var lightsDir: String; // Direction the Lights is going, può essere su, giù, sinistra o destra area var privataW: int; // La larghezza dell'area in cui si svolgerà l'effetto private var areaH: int; // Altezza luci var private: Array = new Array (); // Questo array memorizzerà tutti i Lights Movie Clip in modo che possiamo usarli al di fuori del Per dove li creeremo.

Passaggio 9: Funzione principale

/ * Funzione principale * / funzione pubblica init (areaWidth: int, areaHeight: int, numberOfLights: int, lightSize: int, lightColor: uint, minimumScale: Number, hSpeed: int, vSpeed: int, dir: String, quality: int) : void areaW = areaWidth; areaH = areaAltezza; lightsNumber = numberOfLights; lightsDir = dir;

Questa è la funzione di cui abbiamo bisogno per iniziare l'effetto, impostiamo anche i valori delle variabili in questo codice.


Passaggio 10: creazione delle luci

per (var i: int = 0; i < numberOfLights; i++)  /* Create the specified number of lights */ var light:MovieClip = new MovieClip(); /* Set random speed to x and y based on the params */ xSpeed = Math.floor((Math.random() * (hSpeed - -hSpeed + 1)) + -hSpeed); ySpeed = Math.round((Math.random() * vSpeed) + 0.5); light.xSpeed = xSpeed; light.ySpeed = ySpeed; /* Create lights */ light.graphics.beginFill(lightColor); light.graphics.drawCircle(0, 0, lightSize / 2); light.graphics.endFill();

In questo codice usiamo un'istruzione "For" per creare il numero di Lights che l'utente imposta nel parametro e calcolare una velocità semi-casuale per ogni Light.


Passaggio 11: posizione

Questo imposta una posizione di partenza casuale per le luci in base ai parametri dell'area.

light.x = Math.floor (Math.random () * areaWidth); light.y = Math.floor (Math.random () * areaHeight);

Passaggio 12: Filtro sfocatura

var b: int = Math.floor (Math.random () * 10) + 5; // Calcola una sfocatura casuale tra 0-9 e aggiunge 5 al risultato. var blur: BitmapFilter = new BlurFilter (b, b, quality); // L'oggetto BlurFilter. var filterArray: Array = new Array (blur); // Per applicare il filtro abbiamo bisogno di una serie di filtri. light.filters = filterArray; // Imposta la matrice dei filtri sulla luce

Il codice sopra riportato applica la sfocatura. Ricorda che questo codice fa ancora parte del For, quindi le luci ottengono sfocature diverse.


Passaggio 13: Alfa

light.alpha = Math.random () * 0.6 + 0.1;

Facile; questo imposta la proprietà alfa tra 0.1 e 0.6.


Step 14: Scala

light.scaleX = Math.round (((Math.random () * (1-minimumScale)) + minimumScale) * 100) / 100; light.scaleY = light.scaleX;

Questo imposta la scala delle luci tra la dimensione originale e il parametro della scala minima. Usiamo un metodo rotondo per salvare il processore.


Passaggio 15: aggiunta delle luci allo stage

 addChild (luce); / * Memorizza le luci in una matrice per utilizzarla in seguito * / lights.push (luce); / * Controllare la direzione delle luci * / checkDirection ();

Questo aggiunge le luci allo stage, quindi le salviamo in una matrice per usarle in seguito. Ha anche la funzione checkDirection per vedere in quale direzione andranno le luci.


Passaggio 16: controllare la funzione di direzione

funzione privata checkDirection (): void for (var i: int = 0; i < lights.length; i++)  switch ( lightsDir )  case "up" : lights[i].addEventListener(Event.ENTER_FRAME, moveUp); break; case "down" : lights[i].addEventListener(Event.ENTER_FRAME, moveDown); break; case "right" : lights[i].addEventListener(Event.ENTER_FRAME, moveRight); break; case "left" : lights[i].addEventListener(Event.ENTER_FRAME, moveLeft); break; default : trace("Invalid Direction!");   

Qui usiamo a per per accedere a tutte le luci nella matrice, quindi controllare la variabile di direzione per determinare dove spostare le luci. A seconda della direzione, aggiungiamo l'ascoltatore alla funzione corrispondente.


Passaggio 17: funzioni di spostamento

Questa prossima sezione potrebbe sembrare un po 'complicata, ma è più facile di quanto pensi. Fondamentalmente, sposta la Luce a seconda della velocità calcolata nella funzione Principale, quindi controlla se la Luce ha "lasciato" l'Area dell'effetto. Se questo è il caso, imposta una posizione casuale contraria alla direzione in cui la Luce si sta dirigendo.

funzione privata moveUp (e: Event): void e.target.x + = e.target.xSpeed; e.target.y- = e.target.ySpeed; / * Ripristina posizione luce, prima Y, poi X * / if (e.target.y + (e.target.height / 2) < 0)  e.target.y = areaH + (e.target.height / 2); e.target.x=Math.floor(Math.random()*areaW);  if ((e.target.x + e.target.width / 2) < 0 || (e.target.x - e.target.width / 2) > areaW) e.target.y = areaH + (e.target.height / 2); e.target.x = Math.floor (Math.random () * areaW);  / * Move Down function * / private function moveDown (e: Event): void e.target.x + = e.target.xSpeed; e.target.y + = e.target.ySpeed; / * Ripristina posizione luce, prima Y, poi X * / if (e.target.y - (e.target.height / 2)> areaH) e.target.y = 0 - (e.target.height / 2 ); e.target.x = Math.floor (Math.random () * areaW);  if ((e.target.x + e.target.width / 2) < 0 || (e.target.x - e.target.width / 2) > areaW) e.target.y = areaH + (e.target.height / 2); e.target.x = Math.floor (Math.random () * areaW);  / * Funzione Move Right * / private function moveRight (e: Event): void e.target.x + = e.target.ySpeed; e.target.y + = e.target.xSpeed; / * Ripristina posizione luce, prima Y, poi X * / if (e.target.y - (e.target.height / 2)> areaH || e.target.y + (e.target.height / 2) < 0)  e.target.x = 0 - (e.target.height / 2); e.target.y = Math.floor(Math.random()*areaH);  if ((e.target.x - e.target.width / 2) > areaW) e.target.x = 0 - (e.target.height / 2); e.target.y = Math.floor (Math.random () * areaW);  / * Sposta la funzione Left * / private function moveLeft (e: Event): void e.target.x- = e.target.ySpeed; e.target.y- = e.target.xSpeed; / * Ripristina posizione luce, prima Y, poi X * / if (e.target.y - (e.target.height / 2)> areaH || e.target.y + (e.target.height / 2) < 0)  e.target.x = areaW + (e.target.width / 2); e.target.y=Math.floor(Math.random()*areaH);  if ((e.target.x + e.target.width / 2) < 0)  e.target.x = areaW + (e.target.width / 2); e.target.y=Math.floor(Math.random()*areaW);    

Passaggio 18: chiamata della funzione

Salva la tua classe (ricorda che il file deve avere lo stesso nome della Classe) e torniamo al Fla. Apri il pannello Azioni e scrivi:

import Classes.Lights; var light: Lights = new Lights (); light.init (600, 300, 40, 60, 0xFFFFFF, 0.3, 3, 3, "up", 2); addChild (luce);

Questo è tutto! Metti alla prova il tuo film per vedere il tuo bel sfondo animato!


Conclusione

Giocare con i parametri della classe risulterà in molti effetti diversi, provare a cambiare lo sfondo, impostare velocità più basse o più veloci, usare più luci, meno sfocatura e così via!

Spero che tu abbia imparato qualcosa che puoi usare, grazie per la lettura!