Opprett en statisk Distortion Effect Bruke Displacement Map Filter

Create en statisk Distortion Effect Bruke Displacement Map Filter
3
Del
4
Del

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

To ganger i måneden, går tilbake vi noen av våre lesere favoritt innlegg fra hele historien Activetuts +. Denne opplæringen ble første gang utgitt et år siden i januar 2010.

I denne opplæringen vil du lære hvordan du bruker AS3 er DisplacementMapFilter klasse for å lage en gjenbrukbar statisk forvrengning effekt til knapp velt.




endelig resultat Forhåndsvisning

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



Trinn 1: Om Displacement Mapping
< p> En forskyvning kart fungerer ved hjelp av fargeverdiene fra ett bilde til å endre posisjonen av bildeelementer i et annet bilde. Denne effekten er ofte brukt til å lage en flat grafisk "wrap" rundt et dimensjonalt bilde. Vi kommer til å bruke det her for å forvrenge en knapp slik at det ser ut som det er å motta statisk interferens

Du kan lese mer om fortrengning kartlegging her



Trinn 2:.. Sett opp din Flash File

Opprett en ny Flash-fil (Actionscript 3).

dine filminnstillinger vil variere avhengig av spillet ditt. For denne demoen jeg sette opp min film som 500x300, svart bakgrunn, og 30 fps



Trinn 3:. Lag en enkel knapp

Opprett en ny knapp symbol på scenen (Sett > New Symbol). Design de 4 landene til knappen. Den nøyaktige utformingen bør være noe som passer ditt spill. Noe glowy og halvgjennomsiktige fungerer godt med denne effekten.
Jeg brukte en font som heter Genetrix Square for meg, men du bør bruke noe som matcher utseendet på spillet ditt.

Gi knappen en forekomst navn av "Button1 '



Trinn 4:. Test

Hvis du lagrer og teste filmen (Control > Test Movie) nå skal du se knappen på scenen å svare på mus med roll sier du designet. Liker du dette:



Trinn 5: Lag JitteryButton Class

Vi må legge tilpasset funksjonalitet til våre knappen. Vi vil oppnå dette ved å opprette en ny egendefinert klasse og setter vår enkel knapp inni den.

Opprett en ny Actionscript-fil som heter 'JitteryButton.as'. Lagre denne filen i samme katalog som din viktigste Flash-fil. Legg denne koden for å lage wrapper for vår knapp:
pakke {import flash.display.Sprite; import flash.display.SimpleButton; public class JitteryButton strekker Sprite {private Var MyButton: Simple; //Holder referanse til vår enkel knapp //klassen konstruktør offentlig funksjon JitteryButton (knapp: Simple) {MyButton = knappen; //Knappen på scenen blir vedtatt i}}

Alt dette koden gjør så langt er jeg aksepterer den enkle knappen og lagre en referanse til den. Vi vil legge til mer funksjonalitet senere



Trinn 6:. Lage spillet Class

Opprett en ny Actionscript-fil som heter 'Game.as'. Dette vil være dokumentet klassen for vår film. Lagre den i samme katalog som den viktigste Flash-fil

Denne koden vil legge vår egendefinert knapp wrapper rundt knappen på scenen.
Pakke {import flash.display.MovieClip; public class Spill strekker MovieClip {private Var startknappen: JitteryButton; //Klassen konstruktør offentlig funksjon Game () {//skape nervøs knappen fra enkel knapp på scenen startknappen = new JitteryButton (Button1); //Legger den nye knappen til scenen addChild (startknappen); }}}

Denne koden skaper en ny forekomst av våre tilpassede JitteryButton klasse og sender den knappen på scenen ( 'Button1 ").

Selvfølgelig dokumentet klassen vil ende opp som ser mye annerledes siden det vil ha koden for spillet ditt i den. Her er vi bare opptatt med koden for våre knappen.

Tilbake i Flash-filen satt dokumentet klassen til "Game". Husk, du trenger ikke ta med filtypen her



Trinn 7:. Test Igjen

Hvis du lagrer og teste filmen igjen på dette punktet bør du se nøyaktig det samme som når vi testet i trinn 4. den eneste forskjellen er at nå vår kode er satt opp for å kunne legge til vår tilpassede atferd



Trinn 8:. Opprett Displacement Kartbilde

Vi skal nå lage et bilde av den statiske mønster som vi skal bruke til å forvrenge vår knappen grafikk.

Åpne Photoshop og skape et nytt bilde fylt med nøytral grå (# 808080). Bildet skal være litt bredere enn din knapp og ca 3 eller 4 ganger så høy. Min knapp er 277x56, og mitt bilde er 310x220

Vi starter med en nøytral grå fordi det ikke vil påvirke vårt bilde



Trinn 9:.. Legg til støy

Vi vil nå legge til en liten bit av støy til vårt bilde. Dette vil ikke være svært merkbar i vår statisk effekt, men det gir det litt ekstra shimmer. Du kan hoppe over dette trinnet hvis du vil.

Dupliser bakgrunnslaget og navngi det nye laget "støy". Du skal nå ha 2 lag fylt med nøytral grå. Velg den nye Noise lag og velg Filter > Støy > Legg til støy. Sett Beløp anbefale til 120% og Distribusjon
til Uniform. Sjekk Monokromatiske

Hit OK

Sett "Noise" lag til 10% opasitet



Trinn 10:... Legg Lines

Lag et nytt lag som heter 'Lines'. Nå bruker en 1px blyant pensel til å legge til noen horisontale svarte og grå linjer i bildet

Husk hvordan disse linjene vil påvirke vårt bilde. Noe mørkere enn nøytral vil skifte vårt bilde i en retning og noe lettere vil skifte det . i den andre



Trinn 11: Lagre Displacement Kartbilde

Velg fil > Lagre for Web & Enheter og lagre bildet som et 8 farge gif kalt 'staticMap.gif'



Trinn 12:.

Tilbake i Flash, importere 'staticMap.gif' til biblioteket ( fil > Import > Importer til bibliotek ...). Åpne ledd eiendommer, sjekk Eksporter for Action
, og setter Class navn til "StaticMap '.

Vi kan nå referere dette bildet i vår kode ved hjelp StaticMap klassenavnet.



Steg 13: Opprett Displacement Map Filter

Legg denne funksjonen til JitteryButton klasse:
//skape forskyvning kartet filterprivate funksjon createDMFilter (): DisplacementMapFilter {var mapBitmap: BitmapData = ny StaticMap (0,0); //Bruker bitmap data fra vår StaticMap bilde Var MapPoint: Point = new Point (0, 0); //Posisjonen til StaticMap bilde i forhold til våre knappe Var kanaler: uint = BitmapDataChannel.RED; //Hvilken farge som skal brukes til forflytning Var componentX: UINT = kanaler; Var componentY: UINT = kanaler; Var scaleX: Number = 5; //Mengden av horisontale skift Var Scaley: Nummer = 1; //Mengden av vertikal forskyvning VAR-modus: String = DisplacementMapFilterMode.COLOR; Var farge: uint = 0; Var alfa: Antall = 0; returnere ny DisplacementMapFilter (mapBitmap, MapPoint, componentX, componentY, scaleX, Scaley, modus, farge, alfa);}

Denne funksjonen lager rett og slett den Displacement Map Filter bruker BitmapData fra vår StaticMap bilde. Dette trenger ikke å være i sin egen funksjon, jeg bare gjør det for klarhet

For at det skal fungere vi må importere disse klassene på toppen av vår JitteryButton klasse.
import flash.display.BitmapData, import flash.display.BitmapDataChannel, importere flash.filters.DisplacementMapFilter, importere flash.filters.DisplacementMapFilterMode, import flash.geom.Point;

(Du kan lære mer om DisplacementMapFilter klasse i AS3 dokumentasjon)



Trinn 14: Påfør filter

Vi vil nå opprette en variabel for å holde filteret. Vi bruker det til knappen ved å sette på knappen 's' filtre 'eiendom til en matrise som inneholder vår filter

Her er JitteryButton klassen så langt (linje 18 og 25 er nye).
Pakke {import flash .display.Sprite; import flash.display.SimpleButton; import flash.display.BitmapData; import flash.display.BitmapDataChannel; import flash.filters.DisplacementMapFilter; import flash.filters.DisplacementMapFilterMode; import flash.geom.Point; import caurina.transitions.Tweener; public class JitteryButton strekker Sprite {private Var MyButton: Simple; //Oppretter en variabel for å holde forskyvning kartet filter privat Var dmFilter: DisplacementMapFilter = createDMFilter (); //Klassen konstruktør offentlig funksjon JitteryButton (knapp: Simple) {MyButton = knappen; //Bruke filteret til knappe myButton.filters = new Array (dmFilter); } //Skape forskyvning kartet filter privat funksjon createDMFilter (): DisplacementMapFilter {var mapBitmap: BitmapData = new StaticMap (0,0); //Bruker bitmap data fra vår StaticMap bilde Var MapPoint: Point = new Point (0, 0); //Dette er plasseringen av StaticMap bilde i forhold til våre knappe Var kanaler: uint = BitmapDataChannel.RED; //Hvilken farge som skal brukes til forflytning Var componentX: UINT = kanaler; Var componentY: UINT = kanaler; Var scaleX: Number = 5; //Mengden av horisontale skift Var Scaley: Nummer = 1; //Mengden av vertikal forskyvning VAR-modus: String = DisplacementMapFilterMode.COLOR; Var farge: uint = 0; Var alfa: Antall = 0; returnere ny DisplacementMapFilter (mapBitmap, MapPoint, componentX, componentY, scaleX, Scaley, modus, farge, alfa); }}}



Trinn 15: Test Igjen

Hvis vi lagre og teste filen nå kan vi se forskyvning kartet filteret blir brukt til vår knapp:

Du kan se hvordan de horisontale linjene vi trakk i StaticMap er skiftende pikslene i vår knappen til venstre og høyre. Mengden av skiftet er avhengig av mørke linjene i bildet og scaleX innstillingen i vår Displacement Map Filter.

Dessverre er det statiske ikke animere så det ser ganske halt. La oss fikse det nå ...



Trinn 16: Tilsett randRange Funksjon

Dette er en enkel funksjon som returnerer et tilfeldig heltall innenfor et angitt område:
//returnerer et tilfeldig tall mellom spesifiserte området (inkludert) privat funksjon randRange (min: int, max: int): int {var randomNum: int = Math.floor (Math.random () * (max - min + 1)) + min; tilbake randomNum; }

Jeg synes det gjør det litt enklere å generere tilfeldige verdier. Vi kommer til å randomisering noen forskjellige verdier for våre statisk effekt, så det vil komme godt

Legg den til JitteryButton klasse



Trinn 17:.. Animer Displacement Map Filter

det er et par måter vi kan animere statisk effekt. Den første vil være å endre mengden av horisontale skift anvendes til vår knapp. Dette gjøres gjennom scaleX eiendommen av DisplacementMapFilter.

Vi kan også animere posisjonen til StaticMap bilde i forhold til vår knapp. Dette vil sikre at de samme områdene av knappen er ikke alltid å bli flyttet.

For å animere effekten vil vi legge til en funksjon som heter "displayStatic" som blir kalt hver ramme for å oppdatere disse to egenskapene til filteret . Legg denne funksjonen til JitteryButton klasse:
//oppfordret ENTER_FRAMEprivate funksjon displayStatic (e: Hendelses): void {dmFilter.scaleX = randRange (fuzzMin, fuzzMax); dmFilter.mapPoint = ny Point (0, randRange (0, -160)); myButton.filters = new Array (dmFilter);}

Den første linjen i denne funksjonen randomiserer mengden horisontal forskyvning til en verdi mellom variablene fuzzMin og fuzzMax. Legg disse to variablene til JitteryButton Klasse:
privat Var fuzzMin: int = 0; privat Var fuzzMax: int = 2;

Den andre linjen på displayStatic funksjon randomiserer Y posisjon StaticMap i forhold til vår knapp. Vi har allerede fortalt at filteret skal bruke vår StaticMap bilde slik at vi bare trenger å oppdatere posisjonen.

Den tredje linjen bare re-bruker filteret vårt knappen.

Det siste vi trenger å gjøre for å få dette animeringen er å legge til ENTER_FRAME hendelsen lytteren. Legg til denne linjen til JitteryButton konstruktøren funksjon:
//begynne å vise den statiske effectaddEventListener (Event.ENTER_FRAME, displayStatic);

Og ikke glem å importere hendelsesklassen på toppen av JitteryButton filen:
import flash.events.Event;



Trinn 18: Test Igjen

Hvis du lagrer og teste filmen nå vil du se effekten gjør vår knappen shimmer og hoppe:

det er ganske kult, men vi ønsker at effekten skal reagere på mus også. Onward ...



Trinn 19: Juster intensiteten til Effect

Vi vil nå legge to funksjoner for å justere intensiteten på jitter effekt. Vi ringer effekten vi har for tiden lav intensitet så vil vi legge til en innstilling for Medium og Høy intensitet. Legg disse funksjonene til din JitteryButton klasse:
//øke intensiteten av statisk til MEDIUMprivate funksjon setStaticMedium (e: Mouseevent = null): void {fuzzMin = 2; fuzzMax = 6; staticLength = randRange (8, 12);} //øke styrken på det statiske til HIGHprivate funksjon setStaticHigh (e: Mouseevent = null): void {fuzzMin = 12; fuzzMax = 25; staticLength = 12;}

Du kan se at vi justerer intensiteten ved å sette verdiene til fuzzMin og fuzzMax variabler. På denne måten vår displayStatic funksjonen vil bruke disse nye verdiene når den setter den horisontale forskyvning av filteret.

Vi har også lagt til en variabel kalt staticLength. Vi vil bruke dette til å angi hvor lenge mer intens effekt skal vare (antall bilder) før retur til lav intensitet. Legg denne variabelen til JitteryButton klassen og endre displayStatic funksjon slik:
privat Var staticLength: int; //oppfordret ENTER_FRAMEprivate funksjon displayStatic (e: Hendelses): void {dmFilter.scaleX = randRange (fuzzMin, fuzzMax); dmFilter.mapPoint = ny Point (0, randRange (0, -160)); myButton.filters = new Array (dmFilter); staticLength--; if (staticLength < = 0) {fuzzMin = 0; fuzzMax = 2; }}

Dette nye koden svekkelser den staticLength variabel og tilbake fuzzMin og fuzzMax til de lave intensitetsverdiene når verdien av staticLength når null



Trinn 20:. Sett opp Button Roll Handlers

for å gjøre vårt knappen reagerer på muse vi må legge til to mus hendelsen lyttere og en hendelseshåndterer funksjon for hver

Legg musen lyttere i konstruktør-funksjonen på din JitteryButton klasse.
//legger roll hendelsen lyttere til buttonmyButton.addEventListener (MouseEvent.ROLL_OVER, onButtonRollOver), myButton.addEventListener (MouseEvent.ROLL_OUT, onButtonRollOut);

nå oppretter de to hendelseshåndterere det refereres til i de to nye linjer. Disse også gå i JitteryButton klasse:
//oppfordret knappen ROLL_OVERprivate funksjon onButtonRollOver (e: Mouseevent): void {setStaticHigh ();} //oppfordret knappen ROLL_OUTprivate funksjon onButtonRollOut (e: Mouseevent): void {setStaticMedium ( );}

for å gjøre dette alt arbeid vi må importere Mouseevent klassen på toppen av vår JitteryButton filen:
import flash.events.MouseEvent;

nå når vår knappen oppdager en ROLL_OVER hendelse det vil kalle hendelseshåndterer som igjen kaller vår setStaticHigh funksjon. Denne funksjonen øker verdiene for fuzzMin og fuzzMax (brukes for innstilling av horisontal shift) for varigheten angitt av staticLength variable



Trinn 21:. Tilsett Scale Effect

Vi kunne stopp her. Vår effekt animere pent og reagerer på muse velt. Jeg fortsatt føler at noe mangler her skjønt. La oss legge litt skalering effekt.

Du må laste ned Tweener Bibliotek for dette trinnet hvis du ikke allerede har gjort det. Plasser 'caurina-mappen i prosjektkatalogen og importere Tweener klasser på toppen av JitteryButton filen:
import caurina.transitions.Tweener;

Tweener tillater oss å legge til noen fine skaleringseffekter med bare et par linjer med kode. Vi kan legge til en linje til hver av våre roll hendelseshåndterere:
//oppfordret knappen ROLL_OVERprivate funksjon onButtonRollOver (e: Mouseevent): void {Tweener.addTween (MyButton, {scaleX: 1,1, tid: 0,5, overgang: "easeOutElastic"}); setStaticHigh ();} //oppfordret knappen ROLL_OOUTprivate funksjon onButtonRollOut (e: Mouseevent): void {Tweener.addTween (MyButton, {scaleX: 1, tid: 0,5, overgang: "easeOutElastic"}); setStaticMedium ();}

Her vi legger en animasjon til roll handler som skalerer knappens scaleX eiendom til 110% over .5 sekunder. Vi bruker en elastisk overgangstype for å gi den som bouncy preg. I utbyggingen handler vi gjør det samme i revers, skalere den tilbake til 100%.

Du kan lære mer om hvordan du bruker Tweener i Tweener dokumentasjon.



Trinn 22: Legg Sound

Det siste vi trenger å gjøre lage denne effekten fullstendig er å legge til noen lyd. Jeg gjorde mitt lydeffekt i Garage Band. Du kan lage din egen eller prøve å finne en online.

Når du har en du liker, importere den til biblioteket og sette sammenhengen å eksportere som "StaticSound".

For å legge den til vår JitteryButton vi må først importere Lydklasse:
importere flash.media.Sound;

Så vi vil initialisere den (legge denne linjen rett før konstruktøren funksjon):
privat Var staticSound: Sound = new StaticSound ();

Inne i roll behandleren vil vi fortelle lyden å spille:
//oppfordret knappen ROLL_OVERprivate funksjon onButtonRollOver (e: Mouseevent): void {Tweener.addTween (MyButton, {scaleX: 1.1, tid: 0,5, overgang: "easeOutElastic"}); setStaticHigh (); staticSound.play ();}

Nå er vi godt å gå. Test filmen og alt skal fungere. Hvis knappen eller lyden ikke virker sjekke kildefilene for å se min ferdig JitteryButton klasse



Trinn 23:. Legg til flere knapper

Den kule ting om å bygge denne effekten som en egen klasse som brytes vår knappen er at vi enkelt kan bruke den på andre knapper.

Hvis du vil legge til flere knapper i spillmenyen bare lage en ny knapp og legge den til på scenen. Gi den forekomsten navnet 'knappen2'. Så inne dokumentet klassen ( 'Game.as' fil) opprette en ny JitteryButton og passerer det den nye knappen. Her er hvordan det kan se ut:
pakke {import flash.display.MovieClip; public class Spill strekker MovieClip {private Var startknappen: JitteryButton; privat Var menuButton: JitteryButton; //Klassen konstruktør offentlig funksjon Game () {//oppretter nervøs knappene fra de enkle knappene på scenen startknappen = new JitteryButton (Button1); addChild (startknappen); //Legger til en ny knapp er enkelt! menuButton = ny JitteryButton (knappen2); addChild (menuButton); }}}



Konklusjon

Du vil nesten helt sikkert behov for å endre denne koden litt for å få det til å passe inn i strukturen av spillet. Forhåpentligvis vil denne opplæringen vil gi deg et godt utgangspunkt skjønt.

Hvis du ønsker å endre utseende på denne effekten kan du prøve å bruke ulike typer bilder for StaticMap grafikk, og justere verdiene for fuzzMin og fuzzMax.

Dette er min første tutorial så gi meg beskjed hvis det er noe jeg kan gjøre bedre neste gang. Takk for lesing!



Next Page: