Quick Tips: piske opp Real Time Motion Trails

Quick Tips: piske opp Real Time Motion Trails
Del
Del
Del
Del

Denne Cyber ​​Monday Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.

I denne hurtig Tips vi kommer til å være med ColorMatrixFilter og BlurFilter å skape en Motion Trail effekt.

Vi fant denne awesome forfatteren takket være FlashGameLicense.com, stedet å kjøpe og selge Flash spill




Endelig resultat Forhåndsvisning

La oss ta en titt på det endelige resultatet vi skal jobbe mot.



Trinn 1: Opprett prosjekt og sette den opp

Opprett et nytt prosjekt i FlashDevelop (eller hvilken editor du bruker), sett dimensjonene av SWF til 600x400 og bakgrunnen til svart (# 000000).

Neste, for å sette opp scenen vi kommer til å ha to Sprites, er ett for hovedskjermen som vi vil legge alle visningsobjekter, og den andre er for Motion Trail effekten som bruker hoveddisplayet som en referanse
privat Var _mainDisplay: Sprite = new Sprite (); privat Var _mtDisplay. Sprite = new Sprite ();

Og legge Sprites til Stage
////. Sett opp Viser //Vi må legge til våre to skjermer til StageaddChild (_mtDisplay); addChild (_mainDisplay);.

Nå skal vi bygge vår stjerne image for bruk, eller hvis du vil bruke ditt eget bilde
[Bygg (kilde = '../../images/star.png')]var stjerne: Klasse;

Den siste tingen vi ønsker å gjøre for oppsettet er å lage en loop funksjon. Dette kommer til å bli oppdatert hver ramme, for ting som posisjonering og oppdatere Motion Trail. Så gjør en annen funksjon og en hendelse lytteren å kalle det hver ramme

Din Main.as klasse skal se omtrent slik ut
pakken rtmTrail {import flash.display.Sprite..; import flash.events.Event; public class Hoved strekker Sprite {offentlig funksjon main (): void {if (scene) init (); annet addEventListener (Event.ADDED_TO_STAGE, init); } Private funksjon init (e: Hendelses = null): void {removeEventListener (Event.ADDED_TO_STAGE, init); ////Last inn bilder [Bygg (kilde = '../../images/star.png')] Var stjerne: Klasse; ////Sett opp displayer //Vi må legge til våre to skjermer til scenen addChild (_mtDisplay); addChild (_mainDisplay); //Legg til en ny hendelse lytteren for loop funksjon når vi går inn //rammen for å flytte sprites og oppdatere vår MotionTrail Effect addEventListener (Event.ENTER_FRAME, loop); } Private funksjon loop (e: Hendelses): void {} private Var _mainDisplay: Sprite = new Sprite (); private Var _mtDisplay: Sprite = new Sprite (); }}



Trinn 2: Sprites & Textfield

For å teste Motion Trail vi skal lage ti Sprites fra stjernebildet og plassere dem på tilfeldige steder. I tillegg skal vi lage et punkt som forteller oss fart og retning de vil flytte. Det første du må gjøre er å lage to Arrays å lagre denne informasjonen; en er for Sprite og den andre er for Point
private Var _sprites: Array = new Array (); privat Var _spritesDir. Array = new Array (); privat Var _txt: Textfield = new Textfield (); < p> Legg til init funksjon å tilfeldig opprette og plassere ti stjerner
//Tegn noen starsvar spr: Sprite; Var bmp. Bitmap, for (var i: int = 0; i < 10; i ++) { spr = new Sprite (); bmp = ny stjerne (); spr.addChild (bmp); bmp.smoothing = true; spr.x = Math.random () * 240 + 80; spr.y = Math.random () * 240 + 80; //Vi kommer til å legge den nye sprite opp i _sprites Array og en //Point som forteller oss hvor vi skulle flytte sprite i _spritesDir Array. _sprites.push (spr); _spritesDir.push (ny Point (Math.random () * 6, Math.random () * 6)); //Siste ting å gjøre er å legge den til vår hoved Skjerm _mainDisplay.addChild (spr);.}

Nå for å skape den Textfield legge denne
//Legg et tekstfelt Too _txt.defaultTextFormat = new tekstformat (" arial ", 18, 0xFF00FF); _txt.text = "Real Time Motion Trail" _txt.x = 20; _txt.y = 10; _txt.width = 200; _mainDisplay.addChild (_txt);



Trinn 3: Kontroll Sprite Movement

Nå må vi flytte inn i vår løkke funksjon for Sprite bevegelseskontroll. Ganske enkelt, bruke en for loop å gå gjennom hver Sprite vi har, og hvis den treffer kanten inverse x eller y av Point så det går i den andre retningen. Vi vil også måtte flytte sprite i loop av verdiene i Point og, for å gjøre det mer interessant, langsomt opp
privat funksjon loop (e: Hendelses):. Void {//Oppdater Sprite Shapes for (var i: int = 0; i < _sprites.length, jeg ++) {//Sjekk om formen er på eller ut av //ytre grensene slik at vi kan endre retning hvis (_sprites [i] .x < = 0 || _sprites [i] .x > = 600) _spritesDir [i] .x = -_spritesDir [i] .x; if (_sprites [i] .Y < = 0 || _sprites [i] .Y > = 400) _spritesDir [i] .Y = -_spritesDir [i] .Y; //Flytt Sprite Shape _sprites [i] .x + = _spritesDir [i] .x; _sprites [i] .Y + = _spritesDir [i] .Y; //Roter Sprite Shape _sprites [i] .rotation + = 2; }}

Hvis du vil flytte Textfield øverst til venstre er vi bare nødt til å trekke fra x egenskapen hver ramme, og hvis det går utenfor skjermen sette den tilbake til høyre side av skjermen.
privat funksjon sløyfe (e: Hendelses): void {//Oppdater Sprite Shapes for (var i: int = 0; i < _sprites.length; i ++) {//Sjekk om formen er på eller ut av //ytre grensene slik at vi kan endre retning hvis (_sprites [i] .x < = 0 || _sprites [i] .x > = 600) _spritesDir [i] .x = -_spritesDir [i] .x; if (_sprites [i] .Y < = 0 || _sprites [i] .Y > = 400) _spritesDir [i] .Y = -_spritesDir [i] .Y; //Flytt Sprite Shape _sprites [i] .x + = _spritesDir [i] .x; _sprites [i] .Y + = _spritesDir [i] .Y; //Roter Sprite Shape _sprites [i] .rotation + = 2; } //Flytte tekst _txt.x - = 4 if (_txt.x < -200) _txt.x = 600;}

Etter å ha testet det, bør du ha sett noe som dette (med stjernene og tekst flytte rundt skjermen selvfølgelig)



Trinn 4:. Opprett MotionTrail Class

Nå er det på tide å gjøre vår MotionTrail Class. Hva denne klassen kommer til å gjøre er å ta en Displayobject som trekkes til sin egen skjerm (en Sprite) og bruke et par filtre, falmet og uskarpt.

Så gjør ditt nye MotionTrail.as Class og la det strekke seg Sprite klasse.

For en liten pre-setup for fremgangsmåten for å komme vi kommer til å lage noen variabler, først _display å lagre en referanse i hoveddisplayet, en BitmapData å trekke til, et rektangel størrelsen på scenen og et punkt i øverste venstre hjørne for filtrene. Vare opp er en Array for ColorMatrixFilter
pakken rtmTrail {import flash.display.Bitmap.; import flash.display.BitmapData; import flash.display.DisplayObject; import flash.display.Sprite; import flash.geom.Point; import flash.geom.Rectangle; public class MotionTrail strekker Sprite {offentlig funksjon MotionTrail (display: Displayobject) {//Referanse til skjermen brukes til bevegelse sti _display = display; //Lag en BitmapData Object å trekke til //Hvis du vil bruke dette for ditt eget prosjekt og dimensjonene er ikke 600x400 //så ville du må endre det her og rektangelet under _bitmapData = new BitmapData (600, 400 , sant, 0x000000); //Noen Stuff at filtrene må sent inn for at det skal fungere _rect = new rektangel (0, 0, 600, 400); _pnt = new Point (0, 0); _cMatrix = new Array (); //Tilsett litt åpenhet slik at den ikke tar oppmerksomheten bort fra hovedskjermen alfa = 0,6; addChild (ny Bitmap (_bitmapData)); } Private Var _display: Displayobject; private Var _bitmapData: BitmapData; private Var _rect: rektangel; private Var _pnt: Point; private Var _cMatrix: Array; }}

Siden vi gjort denne klassen vi må gå tilbake virkelig rask til _mtDisplay variable og endre det fra Sprite klasse til MotionTrail klasse, sammen med å legge inn _mainDisplay variable
privat Var _mainDisplay. Sprite = new Sprite (); privat Var _mtDisplay: MotionTrail = new MotionTrail (_mainDisplay);



Trinn 5: ColorMatrixFilter Array

Hvis du vil lage vår Matrix for ColorMatrixFilter, er den grunnleggende idé å visne fargene bort så vi sakte redusere alle verdiene tilbake til null. Legg dette til konstruktøren.
//Lag Matrix for ColorMatrixFilter_cMatrix = _cMatrix.concat ([0,92, 0, 0, 0, 0]) //Red_cMatrix = _cMatrix.concat ([0, 0,92, 0, 0, 0 ]) //Green_cMatrix = _cMatrix.concat ([0, 0, 0,92, 0, 0]) //Blue_cMatrix = _cMatrix.concat ([0, 0, 0, 0,92, 0]) //Alpha

Dette vil multipliserer hver verdi av hver piksel ved 0,92 og som det gjør dette hver ramme vil det bli mindre og mindre til det i utgangspunktet når sin grense på 0. Så de nærmere verdiene er til 1,0 jo lenger tid det tar å nå null, noe som betyr en lengre sti (og vice versa: den nærmere 0,0 jo kortere løype).



Trinn 6:. ColorMatrixFilter og BlurFilter

Nå skaper vi ColorMatrixFilter og BlurFilter
< p> ColorMatrixFilter kommer til å bruke Array vi bare gjort, og vi kommer til å lage to BlurFilters. Jeg fant ut at å bruke to BlurFilters gir en fin puls effekt og det ikke dimme for sakte eller for fort, men hvis du heller ha en som er bra også.

Legg variablene for filtrene først. Anmeldelser private Var _cFilter: ColorMatrixFilter; private Var _bFilter: BlurFilter; private Var _bFilter2: BlurFilter;

Lag filtrene i konstruktøren
_cFilter = new ColorMatrixFilter (_cMatrix); _ bFilter = new BlurFilter (2, 2, 1); _bFilter2 = new BlurFilter (8, 8, 1);



Trinn 7: Oppdatere MotionTrails

Nå er det på tide å lage en funksjon for å oppdatere våre Motion Trails. Lag en funksjon som heter oppdateringen i MotionTrail Class. For å gjøre stien vi må trekke hovedskjermen til BitmapData hver ramme som gjør stien effekt
offentlig funksjon oppdatering (). Void {//Tegn Skjerm på BitmapData _bitmapData.draw (_display);}

Du skal nå ha en sti hvis du kjører den, men selvfølgelig Motion Trails visne bort, og vi vil gjøre det forsvinne med filtrene vi har gjort i det siste trinnet



Trinn 8:. Bruk Filters

Nå kan vi bruke filtrene til BitmapData. Vi bruker samme BitmapData for kilden, _rect og _pnt variabler for sourceRect og destPoint henholdsvis, og siste er det filteret vi ønsker å bruke.

Siden vi har noen filtre vi ikke ønsker å bruke alle av dem hver ramme fordi du gjør det ville bremse ting ned for mye. I stedet skal vi slå ColorMatrixFilter og BlurFilter å arbeide i ulike rammer og bytte BlurFilters på samme måte også.

Hvis du vil bytte dem rundt vi kommer til å ha en variabel for å holde styr på rammen og bruk modulen operatøren å kontrollere
private Var _count. Antall = 0; offentlig funksjon oppdateringen (): void {//Tegn Skjerm på BitmapData _bitmapData.draw (_display); //Bruke effekter på BitmapData if (_count% 2 == 0) _bitmapData.applyFilter (_bitmapData, _rect, _pnt, _cFilter); else if (_count% 4 == 1) _bitmapData.applyFilter (_bitmapData, _rect, _pnt, _bFilter); annet _bitmapData.applyFilter (_bitmapData, _rect, _pnt, _bFilter2); //Øk Count _count ++;}

Nå som oppdateringsfunksjonen er ferdig vi legge den til vår sløyfe funksjon
//Update Motion Blur_mtDisplay.update ();.



Konklusjon Testing og Utvide

Awesome! Vi er ferdige med denne Quick Tips og du kan gå videre og teste det ut.

Du burde ha fått det samme resultatet som prøven swf og nå kan du prøve å utvide den. Det er mange forskjellige effekter du kan gjøre, det meste av det hvis du forstår ColorMatrixFilter

For eksempel kan du fade fargen på stien til rødt ved å gjøre dette.
//Offset Red Verdi med 30 hver time_cMatrix = _cMatrix.concat ([0,92, 0, 0, 0, 30]) //Red_cMatrix = _cMatrix.concat ([0, 0,92, 0, 0, 0]) //Green_cMatrix = _cMatrix.concat ([ ,,,0],0, 0, 0,92, 0, 0]) //Blue_cMatrix = _cMatrix.concat ([0, 0, 0, 0,92, 0]) //Alpha

Eller du kan også slå fargene gjør alle løypene blå:
//Bare Blå trails_cMatrix = _cMatrix.concat ([0, 0, 0, 0, 0]) //Red_cMatrix = _cMatrix.concat ([0, 0, 0, 0, 0]) //Green_cMatrix = _cMatrix .concat ([0,92, 0,92, 0,92, 0, 0]) //Blue_cMatrix = _cMatrix.concat ([0, 0, 0, 0,92, 0]) //Alpha

Takk for lesing. Jeg håper dere alle har lært noe av dette og det vil være nyttig i fremtiden, muligens en kul nytt spill ved hjelp av denne effekten. Anmeldelser



Previous:
Next Page: