Bygg en aktiv Flash Game Meny: The Bounce

Build en aktiv Flash Game Meny: The Bounce
en
Del
4
Del

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

Førsteinntrykket er veldig viktig på en Flash spill portal.; Hvis spillet ikke ta spilleren i de første sekundene, de har fått nok av andre spill å velge mellom. Som på menyen er det første punktet i grensesnittet, til noe du kan gjøre for å gjøre det mindre kjedelig vil hjelpe. I denne opplæringen vil vi lage en meny som inkorporerer bytte dybde, glatt rulle over effekter, og to forskjellige overgangs design.




Endelig resultat Forhåndsvisning

Dette er de to design vi skal jobbe mot:

Den første design vil ha de neste skjermbildene overgangen fra ulike retninger, avhengig av hvilket alternativ som er klikket

Den andre motiv overganger alle skjermer i fra. bunnen. et mer fleksibelt valg hvis du har mer enn fire alternativer



Innledning: Hva gjør det "Active"

det er hovedsakelig to ting som gjør denne menyen "aktiv? ". Den første er den rulle over effekter på knappene: uansett hvor mye de har skalert når du ruller ut, de skalere ned fra den aktuelle størrelse (i motsetning til en tween opprettet på tidslinjen). Den andre er at koden til andre stilen er designet for å være fleksibel og lett å utvide til eget behov



Trinn 1:. Klar

Det første vi skal til å trenge for å lage en ny Flash-fil (Actionscript 3.0). Sette bredden til 600px, høyden til 300px, og rammer per sekund til 30. Bakgrunnsfargen kan stå som hvit

Nå lagre filen.; du kan kalle det hva du vil, men jeg kalt meg menuBounce.fla.

I neste avsnitt vil vi skape de åtte movieclips brukes i menyen. For referanse, her er en liste over alle fargene som brukes gjennom hele opplæringen:

White - #FFFFFF (0xFFFFFF)

Gold - # E8A317 (0xe8a317)

Light Gold - # FBB917 (0xfbb917)

Blue - # 1569C7 (0x1569c7)

Lyseblå - # 1389FF (0x1389ff)

Grønn - # 347235 (0x347235)

Lysegrønn - # 3E8F1B (0x3e8f1b)

Red - # 990000 (0x990000)

Lys Rød - # C10202 (0xc10202)

Matte Grey - # 222222 (0x222222)



Trinn 2: opprette movieclips

til å begynne med vil vi skape den "ryggen" (filmklipp som vil stå i for faktiske skjermbildene ), men før vi begynner la oss slå på noen svært nyttige Flash funksjoner

Høyreklikk på scenen og velg Grid >.; Vis Grid. Som standard vil det skape en 10px av 10px rutenett over scenen. Deretter høyreklikker du på scenen igjen og denne gangen velger Festing > Fest til rutenettet.

Nå kan vi begynne å tegne! Velg rektangelverktøyet og tegne en 600x300px lys gull rektangel. Deretter velger du dette fyll, høyreklikk og velg Convert to Symbol. Navngi MovieClip goldBack, angi typen til MovieClip og registreringen til øverst til venstre.

Neste høyreklikke på MovieClip og velg Duplicate tre ganger for å gjøre tre flere eksemplarer av den. Nå fargelegge dem med lys blå, lys grønn og lys rød. Deretter navngi dem Blueback, dollar og Redback henholdsvis

For å fullbyrde ryggen vi bør legge noen form for tekst i hver MovieClip. På goldBack skrive "PLAY", på Blueback skrive "instruksjoner", på greenback skrive "Valg", og på Redback skrive "Credits". Når du har skrevet teksten vil jeg anbefale å bryte den fra hverandre før det blir et fyll (dette fjerner behovet for å legge inn skrifttyper og gjør overgangen ser jevnere). Ryggen bør ligne på den nedenfor:

Nå la oss starte på klikk torg! Velg rektangelverktøyet og tegne en 100x100px lys gull firkantet. Velg fyll, høyreklikke og Konverter til Symbol. Navngi MovieClip goldSquare, angi typen til MovieClip og registreringen til øverste venstre. Nå er tiden inne til å skrive tekst på torget, bortsett fra denne gangen i stedet for å bryte teksten fra hverandre forlate det for nå. Sett inn en keyframe og endre fyllfargen til gull. Nå pause fra hverandre teksten på begge rammene til de blir fills.

Nå høyreklikker MovieClip og velg Duplicate Symbol tre ganger. Så gjentar den samme prosessen fra før for de tre andre farger, navngi movieclips Bluesquare, greenSquare og redSquare hhv. Dine rutene bør ligne på den nedenfor:



Trinn 3: Plassering av movieclips

Begynn med å slette alt av scenen. Så gå til Sett > New Symbol. Name it menuBounceMC, angi typen til MovieClip, registreringen i øverste venstre og eksportere det som MenuBounceMC

Nå drar alle ryggen fra biblioteket inn i det og plassere dem på følgende måte:.


goldBack: (-600,0)

Blueback: (0, -300)

Greenback: (0300)

Redback: (600, 0)

Hvis du skal bruke én retning utformingen deretter plassere alle fire av ryggen på en av disse stillingene. Jeg brukte (0, 300)

Nå drar alle rutene fra biblioteket inn i MovieClip og kroppsposisjon dem på følgende måte:.

  • goldSquare: (120150)

    Bluesquare: (240150)

    greenSquare: (360150)

    redSquare: (480, 150)

    Det siste vi må gjøre før vi begynner koding er tildele forekomstnavn. Sett eksempel navn på rutene som square0, square1, square2, square3, fra venstre. Neste angi eksempel navn på ryggen i henhold til tilsvarende med kvadratet av samme farge. Så goldBack ville få forekomstnavnet back0 fordi goldSquare har forekomstnavnet square0



    Trinn 4:. Sette opp klassene

    Nå som vi er ferdig med å opprette og posisjonere movieclips vi kan begynne å sette opp de to klassene som vi vil bruke

    Først gå til din Flash filens egenskaper og sette sin klasse MenuBounce.; Deretter oppretter du en ny Actionscript 3.0-fil og lagre den som MenuBounce.as

    Nå kopiere følgende kode inn i den.; Jeg vil forklare det etter:
    pakke {import flash.display.MovieClip; import flash.events.Event; public class MenuBounce strekker MovieClip {public Var menuBounceMC: MenuBounceMC = new MenuBounceMC (); offentlig funksjon MenuBounce () {addChild (menuBounceMC); }}}

    Dette er et grunnleggende dokument klasse som vi har lagt til litt ekstra kode som oppretter en forekomst av MenuBounceMC og legger det til scenen.

    Nå opprette en ny Actionscript 3.0-fil og lagre det som MenuBounceMC.as. Nå kopiere følgende kode inn i den, slik at vi kan sette den opp
    pakke {import flash.display.MovieClip.; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; public class MenuBounceMC strekker MovieClip {public Var activeSquare: MovieClip; offentlig Var activeBack: MovieClip; offentlig Var squaresArray: Array = new Array (); offentlig Var backsArray: Array = new Array (); offentlig Var hastighet: Number = 20; offentlig funksjon MenuBounceMC () {}}}

    Hver variabel har et bestemt formål:

    activeSquare: Hvilke torget blir rullet over

    activeBack: Hvilke sikkerhets har blitt valgt ut til å flytte

    squaresArray: En rekke inneholder alle de firkantede movieclips

    backsArray: En rekke inneholder alle rygg movieclips

    hastighet: Hvor mange piksler ryggen er flyttet av hvert ramme

    Alle disse variablene har blitt satt, med unntak av topSquare (som er innstilt i andre funksjoner) og oppstillingene. Så vi må presse alle movieclips på tabellen. Legg til følgende linjer inne i konstruktøren:
    squaresArray = [square0, square1, square2, square3]; backsArray = [back0, back1, back2, back3];

    Men denne metoden kan være litt kjedelig hvis du skal bruke et høyt antall movieclips i menyen - si 50. Et alternativ vil være å skape movieclips helt gjennom koden og presse dem når du legger dem til menyen. Men for vårt formål med å bruke bare åtte movieclips det fungerer fint.

    Det siste settet med ting vi trenger å legge til for å fullføre oppsettet er vårt arrangement lyttere, noe som vil utløse alle overganger og rulle over effekter. Legg disse linjene under trykk () linjer
    addEventListener (MouseEvent.MOUSE_OVER, bounceOver),. AddEventListener (MouseEvent.MOUSE_OUT, bounceOut), addEventListener (MouseEvent.CLICK, bounceClick), addEventListener (Event.ENTER_FRAME, bounceUpdate); < hr>
    Trinn 5: Opprette Mouseevent Handlers

    La oss starte med å lage de tre enklere funksjoner:
    offentlig funksjon bounceOver (event: Mouseevent): void {} offentlig funksjon bounceOut (event: Mouseevent ): void {} offentlig funksjon bounceClick (event: Mouseevent): void {}

    Inne i bounceOver () -funksjonen start ved å legge til en if-setning for å sørge for at ingen tilbake er for tiden "aktiv" - det vil si overgangen i , overgangen ut, eller sitter på toppen:
    if (activeBack == null) {}

    resten av all koden i bounceOver () -funksjonen vil bli skrevet inne at if-statement. Nå regner vi ut om objektet rullet over (den event.target) er en firkant, ved å sjekke om det er i squaresArray []: (! SquaresArray.indexOf (event.target) = -1)
    om {} < p> Antar det er, gjør vi virkelige kjøtt av funksjonen:
    activeSquare = event.target som MovieClip; activeSquare.gotoAndStop (2); setChildIndex (activeSquare, numChildren - 1);

    Først satt vi variabelen activeSquare å peke på torget i spørsmålet. Etter at vi stanse denne plassen animasjon på den andre rammen, som viser sin "rollover" image. Til slutt vi flytte sprite å være på toppen av alt annet, ved hjelp setChildIndex ().

    Vi har nå flytte inn i bounceOut () -funksjonen. Denne gangen får vi ved å sjekke om objektet som musen blir rullet ut er den aktive torget
    :
    if (event.target == activeSquare) {}

    Inne i hvis -blokk legge til følgende kode; stopper den plassen animasjon på det første bildet på nytt, og deretter setter activeSquare tilbake til null, slik at vi kan rulle over en annen:
    activeSquare.gotoAndStop (1); activeSquare = null;

    Så gå til bounceClick () -funksjonen. Denne funksjonen vil bli brukt til å initiere alle overganger. Begynn med å sjekke om det allerede finnes en aktiv tilbake:
    if (activeBack == null) {}

    Dette hindrer at brukeren klikker på en annen torget i en overgangs. Hvis det er en aktiv tilbake, da et klikk skal angre dette, slik at vi kan klikke annet kvadrat:
    if (activeBack == null) {} else {activeBack = null; }

    Antar det er ingen aktive tilbake, nok en gang legge til en if-blokken for å sjekke om objektet klikket var en firkant:
    if (activeBack == null) {if (squaresArray.indexOf (event.target)! = -1) {}} else {activeBack = null; }

    Hvis brukeren gjorde Klikk en firkant, vi må stille tilsvarende tilbake som "aktiv" tilbake. Siden indeksen for hvert element i backsArray [] matcher indeksen for hvert element i squaresArray, dette er enkel: (! SquaresArray.indexOf (event.target) = -1)
    if (activeBack == null) {if { activeBack = backsArray [squaresArray.indexOf (event.target)] som MovieClip; }} Else {activeBack = null; }

    Nå trenger vi bare å flytte den aktive tilbake slik at det er på toppen av alt annet:
    if (activeBack == null) {if (! SquaresArray.indexOf (event.target) = -1) {activeBack = backsArray [squaresArray.indexOf (event.target)] som MovieClip; setChildIndex (activeBack, numChildren - 1); }} Else {activeBack = null; }



    Trinn 6: Opprette siste arrangementet Handler

    Dette er den siste funksjonen vi skal lage. La oss begynne med å legge skaleringseffekt for når et kvadrat er rullet over eller ut:
    offentlig funksjon bounceUpdate (hendelse: Hendelse): void {for hver (var torget i squaresArray) {if (firkant == activeSquare) {if ( square.scaleX < = 1,5) {square.scaleX + = 0,05; square.scaleY + = 0,05; }} Else {if (square.scaleX > = 1) {square.scaleX - = 0,05; square.scaleY - = 0,05; }}}}

    Her har vi laget en for-hver sløyfe for å gå gjennom hver rute i matrisen, og sjekke om det er den aktive torget. Hvis det er, skalere vi det opp før det er større eller lik 1,5 ganger sin vanlige størrelse; hvis det ikke er, skalere vi det ned før det er tilbake til vanlig størrelse. (Teknisk sett kan denne koden tillate det å være svært litt mindre enn sin vanlige størrelse, men dette er umerkelig i praksis.)

    Nå er dette hvor noen av dere vil gå dine separate veier; hvis du oppretter Design 1 gå til trinn 7a, og hvis du oppretter Design 2 gå til trinn 7b



    Trinn 7a. Behandling Design 1

    Gratulerer du har valgt utformingen 1 ! Denne utformingen er enkel og lett å følge - forutsatt at du har nøyaktig fire firkanter og ryggen. Noe mer, og det blir et rot å opprettholde

    Vi kommer til å bruke en lang serie nestede if-else-uttalelser -. Veldig rotete, jeg vet. Men la meg fortelle deg begrunnelsen bak dette! Hver tilbake har en annen utgangsstilling og overgang retning. I et nøtteskall, kan du ikke bruke en enkelt for-løkke for å flytte alle movieclips med mindre du har en if setning for å sjekke hvilken tilbake beveger seg, en til å sette akse bevegelse (x eller y), og en tredje for å angi hastighet (positiv eller negativ). Ok, vi kunne lagre all denne informasjonen i egenskapene til firkanter eller noe sånt, men jeg tror dette er en tilnærming der "Keep It Simple, Stupid" gjelder.
    If (activeBack == back0) {if (back0. x < 0) {back0.x + = hastighet; }} Else {if (back0.x > -600) {back0.x - = hastighet; }} If (activeBack == back1) {if (back1.y < 0) {back1.y + = hastighet; }} Else {if (back1.y > -300) {back1.y - = hastighet; }} If (activeBack == back2) {if (back2.y > 0) {back2.y - = hastighet; }} Else {if (back2.y < 300) {back2.y + = hastighet; }} If (activeBack == back3) {if (back3.x > 0) {back3.x - = hastighet; }} Else {if (back3.x < 600) {back3.x + = hastighet; }}

    Koden er lett å forstå; det ser i hvert tilbake og flytter det inn på scenen eller på scenen, i riktig retning, avhengig av hvorvidt det er aktiv



    Trinn 7b. Behandling Design 2

    Gratulerer du har valgt design 2! Dette designet er langt mer fleksibel og gjør ting mye enklere når det gjelder å legge til flere rygger og bruke mindre kode. For dette design vil vi bruke en annen for-hver sløyfe for å undersøke hver tilbake i backsArray:
    for hver (var tilbake i backsArray) {if (tilbake == activeBack) {if (back.y > 0) {tilbake .Y - = hastighet; }} Else {if (back.y < 300) {back.y + = hastighet; }}}

    Nå bør dette være ganske lett å forstå. Det sykluser gjennom ryggen og sjekker hver for å se om den er aktiv. Hvis det er, beveger koden den oppover på scenen, og slutter å bevege den når den er helt på (dvs. når den er på y = 0 eller høyere). Hvis ryggen er ikke aktiv, beveger koden den tilbake ned til den når sin startposisjon



    Konklusjon

    Her er en utfordring. Gitt 16 ruter (og 16 rygg), kan du gjøre det slik at rutene 1, 5, 9 og 13 gjør det tilsvarende ryggen overgang fra venstre, Squares 2, 6, 10 og 14 gjør dem overgangen fra toppen, og så videre? Du må kombinere de to tilnærmingene, samt sjekke posisjonen til den aktive torget /tilbake i sitt utvalg.

    Takk for at du tok deg tid til å lese gjennom denne opplæringen. Jeg håper du likte det ferdige produktet og har lært noe om å gjøre aktive, fleksible menyer!