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 Hit OK Sett "Noise" lag til 10% opasitet 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 Velg fil > Lagre for Web & Enheter og lagre bildet som et 8 farge gif kalt 'staticMap.gif' Tilbake i Flash, importere 'staticMap.gif' til biblioteket ( fil > Import > Importer til bibliotek ...). Åpne ledd eiendommer, sjekk Eksporter for Action Vi kan nå referere dette bildet i vår kode ved hjelp StaticMap klassenavnet. Legg denne funksjonen til JitteryButton klasse: 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. (Du kan lære mer om DisplacementMapFilter klasse i AS3 dokumentasjon) 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). 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å ... Dette er en enkel funksjon som returnerer et tilfeldig heltall innenfor et angitt område: 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 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: 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: 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: Og ikke glem å importere hendelsesklassen på toppen av JitteryButton filen: 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 ... 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: 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: Dette nye koden svekkelser den staticLength variabel og tilbake fuzzMin og fuzzMax til de lave intensitetsverdiene når verdien av staticLength når null 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. nå oppretter de to hendelseshåndterere det refereres til i de to nye linjer. Disse også gå i JitteryButton klasse: for å gjøre dette alt arbeid vi må importere Mouseevent klassen på toppen av vår JitteryButton filen: 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 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: 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: 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. 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: Så vi vil initialisere den (legge denne linjen rett før konstruktøren funksjon): Inne i roll behandleren vil vi fortelle lyden å spille: 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 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: 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!
til Uniform. Sjekk Monokromatiske
Trinn 10:... Legg Lines
Trinn 11: Lagre Displacement Kartbilde
Trinn 12:.
, og setter Class navn til "StaticMap '.
Steg 13: Opprett Displacement Map Filter
//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);}
import flash.display.BitmapData, import flash.display.BitmapDataChannel, importere flash.filters.DisplacementMapFilter, importere flash.filters.DisplacementMapFilterMode, import flash.geom.Point;
Trinn 14: Påfør filter
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
Trinn 16: Tilsett randRange Funksjon
//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; }
Trinn 17:.. Animer Displacement Map Filter
//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);}
privat Var fuzzMin: int = 0; privat Var fuzzMax: int = 2;
//begynne å vise den statiske effectaddEventListener (Event.ENTER_FRAME, displayStatic);
import flash.events.Event;
Trinn 18: Test Igjen
Trinn 19: Juster intensiteten til Effect
//ø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;}
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; }}
Trinn 20:. Sett opp Button Roll Handlers
//legger roll hendelsen lyttere til buttonmyButton.addEventListener (MouseEvent.ROLL_OVER, onButtonRollOver), myButton.addEventListener (MouseEvent.ROLL_OUT, onButtonRollOut);
//oppfordret knappen ROLL_OVERprivate funksjon onButtonRollOver (e: Mouseevent): void {setStaticHigh ();} //oppfordret knappen ROLL_OUTprivate funksjon onButtonRollOut (e: Mouseevent): void {setStaticMedium ( );}
import flash.events.MouseEvent;
Trinn 21:. Tilsett Scale Effect
import caurina.transitions.Tweener;
//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 ();}
Trinn 22: Legg Sound
importere flash.media.Sound;
privat Var staticSound: Sound = new StaticSound ();
//oppfordret knappen ROLL_OVERprivate funksjon onButtonRollOver (e: Mouseevent): void {Tweener.addTween (MyButton, {scaleX: 1.1, tid: 0,5, overgang: "easeOutElastic"}); setStaticHigh (); staticSound.play ();}
Trinn 23:. Legg til flere knapper
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