Lag en snurrig animert flash bakgrunn

To ganger i måneden besøker vi noen av våre leseres favorittinnlegg fra hele historien til Activetuts +. Denne opplæringen ble først publisert i mai 2009.

Ved hjelp av ActionScript 3.0 oppretter vi en kul, animert bakgrunn som vi kan bruke i menyskjermene eller som en musikkvisualiserer.

Endelig resultatforhåndsvisning

La oss ta en titt på hva vi skal jobbe for:


Trinn 1: Kort oversikt

Vi lager en klasse som tar vare på hele effekten. Når du ringer til klassen, kan du endre antall lys, farge, alfa, størrelse, retning, hastighet og kvaliteten på Blur-filteret. På denne måten er det mulig å oppnå mange forskjellige resultater når man bruker det. Du kan også bruke hvilken som helst bakgrunn du vil ha.


Trinn 2: .fla-dokumentet

Opprett et nytt ActionScript 3.0-dokument (File> New ...). Sett Stage-størrelsen til de ønskede dimensjonene, jeg har brukt 600 x 300 px.


Trinn 3: Din bakgrunn

Legg til eller tegne et bilde som skal brukes som bakgrunn, jeg har brukt en enkel blå gradient (# 02C7FB, # 1F63B4).


Trinn 4: Lag

Gi nytt navn til det første laget til "Bakgrunn", og opprett en annen og kaller den "Kode". Du kan låse "Kode" laget for å unngå å plassere uønskede tegninger der inne.


Trinn 5: ActionScript

Lagre arbeidet ditt og la oss komme inn i koden!

Jeg antar at du allerede har en grunnleggende forståelse av ActionScript 3.0, hvis du har noen nøkkelord for bestemte søkeord, vennligst se Flash Help (F1).

Opprett en ny ActionScript-fil (Fil> Ny ...).


Trinn 6: Importerer obligatoriske klasser

pakke klasser / * Import obligatoriske klasser * / import flash.display.MovieClip; importer flash.filters.BitmapFilter; importer flash.filters.BlurFilter; importere flash.events.Event;

Her importerer vi klassene som vi skal bruke, husk at ordet ved siden av "pakke" er navnet på mappen der vår klasse ligger.


Trinn 7: Utvide klassen

// Vi må forlenge klassen, slik at vi kan bruke addChild () -metoden. offentlig klasse Lights utvider MovieClip 

Utvidelse av MovieClip-klassen tillater at klassen vår arver alle metodene, egenskapene og funksjonene som MovieClip har, i dette tilfellet bruker vi det for å få tilgang til addChild () -metoden.


Trinn 8: Variablene

Selv om de har ganske mye selvforklarende navn, legger jeg til korte kommentarer på hver var for å sikre at det er klart. De får sine verdier fra parametrene til hovedfunksjonen.

 private var lightsNumber: int; // Antall lys på scenen privat var xSpeed: int; // Den horisontale hastigheten lysene har private var ySpeed: int; // Vertikal hastighet private var lightsDir: String; // Retning lysene går, dette kan være opp, ned, venstre eller høyre privat var areaW: int; // Bredden på arealet hvor effekten vil finne sted privat var areaH: int; // Høyde private var lys: Array = new Array (); // Dette arrayet lagrer alle Lights MovieClips slik at vi kan bruke dem utenfor For hvor vi skal lage dem.

Trinn 9: Hovedfunksjon

/ * Hovedfunksjon * / offentlig funksjon init (områdebredde: int, areaHeight: int, numberOfLights: int, lightSize: int, lightColor: uint, minimumSkala: Nummer, hSpeed: int, vSpeed: int, dir: Streng, kvalitet: int) : void areaW = areaWidth; areaH = areaHeight; lightsNumber = numberOfLights; lightsDir = dir;

Dette er funksjonen som vi trenger for å starte effekten, vi stiller også de variable verdiene i denne koden.


Trinn 10: Opprette lysene

for (var jeg: 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();

I denne koden bruker vi en "For" -oppgave for å opprette antall lys som brukeren angir i parameteren og beregne en semi-tilfeldig hastighet for hvert lys.


Trinn 11: Stilling

Dette setter en tilfeldig startposisjon for lysene basert på områdeparametrene.

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

Trinn 12: Uklarhet

var b: int = Math.floor (Math.random () * 10) + 5; // Beregner en tilfeldig Blur mellom 0-9 og legger 5 til resultatet. var uskarphet: BitmapFilter = ny BlurFilter (b, b, kvalitet); // BlurFilter-objektet. var filterArray: Array = nytt Array (uskarphet); // For å bruke filteret trenger vi en rekke filtre. light.filters = filterArray; // Setter filtrefeltet til lyset

Ovennevnte kode gjelder Blur. Husk at denne koden fortsatt er en del av For, slik at lysene blir forskjellige Blurs.


Trinn 13: Alpha

light.alpha = Math.random () * 0,6 + 0,1;

En enkel en; Dette setter alfaegenskapen mellom 0,1 og 0,6.


Trinn 14: Skala

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

Dette setter skalaen til lysene mellom den opprinnelige størrelsen og minimumskala parameteren. Vi bruker en rund metode for å spare prosessor.


Trinn 15: Legge til lysene på scenen

 addChild (lys); / * Lagre lys i en matrise for å bruke det senere * / lights.push (lys); / * Sjekk etter lysretning * / kontroller retning ();

Dette legger lysene til scenen, så lagrer vi dem i et array for å bruke dem senere. Det er også checkDirection-funksjonen for å se hvilken retning lysene skal gå.


Trinn 16: Kontroller retningsfunksjon

privat funksjon 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!");   

Her bruker vi en til For å få tilgang til alle lysene i Array, kontroller du retningsvariabelen for å bestemme hvor du skal flytte lysene. Avhengig av retningen legger vi lytteren til den tilsvarende funksjonen.


Trinn 17: Flytte funksjoner

Denne neste delen kan virke litt komplisert, men det er lettere enn du tror. I utgangspunktet beveger det lyset avhengig av hastigheten beregnet i hovedfunksjonen, og kontrollerer om lyset har "forlatt" området for effekten. Hvis det er tilfelle, setter det en tilfeldig posisjon i motsetning til retningen lyset er på vei.

privat funksjonen flytting (e: Event): void e.target.x + = e.target.xSpeed; e.target.y- = e.target.ySpeed; / * Tilbakestill lysposisjon, Y først, deretter X * / hvis (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) > områdeW) e.target.y = areaH + (e.target.height / 2); e.target.x = Math.floor (Math.random () * areaW);  / * Flytt ned funksjon * / privat funksjon moveDown (e: Event): void e.target.x + = e.target.xSpeed; e.target.y + = e.target.ySpeed; / * Tilbakestill lysposisjon, Y først, deretter X * / hvis (e.target.y - (e.target.height / 2)> areaH) e.target.y = 0 - (e.target.height / 2 ); e.target.x = Math.floor (Math.random () * areaW);  hvis ((e.target.x + e.target.width / 2) < 0 || (e.target.x - e.target.width / 2) > områdeW) e.target.y = areaH + (e.target.height / 2); e.target.x = Math.floor (Math.random () * areaW);  / * Flytt Høyre funksjon * / privat funksjon moveRight (e: Event): void e.target.x + = e.target.ySpeed; e.target.y + = e.target.xSpeed; / * Tilbakestill lysposisjon, Y først, deretter X * / hvis (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) > områdeW) e.target.x = 0 - (e.target.height / 2); e.target.y = Math.floor (Math.random () * areaW);  / * Flytt Venstre funksjon * / privat funksjon moveLeft (e: Event): void e.target.x- = e.target.ySpeed; e.target.y- = e.target.xSpeed; / * Tilbakestill lysposisjon, Y først, deretter X * / hvis (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);    

Trinn 18: Kaller funksjonen

Lagre klassen din (husk at filen må ha samme navn som klassen) og la oss komme tilbake til Fla. Åpne handlingspanelet og skriv:

importere klasser. lys; var lys: Lys = Nytt lys (); light.init (600, 300, 40, 60, 0xFFFFFF, 0,3, 3, 3, "opp", 2); addChild (lys);

Det er det! Test filmen din for å se din fine, animerte bakgrunn!


Konklusjon

Å spille med parametrene i klassen vil resultere i mange forskjellige effekter, prøv å endre bakgrunnen, sett tregere eller raskere hastigheter, bruk mer lys, mindre uskarphet og så videre!

Jeg håper du lærte noe du kan bruke, takk for å lese!