Improve hukommelsen med en Away3D Spill 
 en 
 Del 
 Del 
 Del 
 
 Dette Cyber mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av. 
 
 I denne opplæringen vil vi bygge en 3D-minne spillet. Underveis vil vi se på å legge variabler og mouseEvents å Away3D stedene. La oss komme i gang .. 
 
 
 
 Trinn 1:. Action File 
 
 Opprett en ny Actionscript 3.0 fil 
 
 Trinn 2: Rediger profil 
 
 I egenskapspanelet trykker på knappen Rediger 
 
 Trinn 3:.. Velg Flash Player versjon 
 
 Velg Flash Player 9 profilen, og klikk OK 
 
 Trinn 4: Få den Away3D Engine 
 
 Lagre filen som "Memory Game.fla" i minne spillet Tutorial mappe. Nå laste ned Away3D motoren Away3D nedlastinger. Vi vil bruke versjon 2.3.3 for Flash Player 9. Pakk ut arkivet og kopiere alle mapper til minne spillet Tutorial mappe 
 
 Trinn 5:.! Få Tweener 
 
 Last ned Tweener herfra . Pakk klassen filene til din Memory Game Tutorial mappe slik at det hele ser ut som dette: 
 
 Trinn 6: Import Tekstur 
 
 Vi vil bruke 5 forskjellige kort for dette spillet (du finner dem i kildefilene). Importere dem til Flash ved å gå Fil > Import > Importer til bibliotek 
 
 Trinn 7:. Eksport Teksturer for Action 
 
 For å bruke disse teksturer i runtime vi trenger å legge ved en klasse navn til dem. Velg bildene en etter en og gå Høyreklikk > Properties > Eksport for Actionscript. Bare fjerne "PNG" deler av deres navn 
 
 Trinn 8:. Begynn Coding 
 
 Etter alt det vi er klar til å starte koding. La oss fylle våre første linjene ved å importere klasser: 
 import away3d.cameras *; import away3d.containers *, import away3d.materials *; import away3d.primitives.Planeimport away3d.primitives.Cubeimport away3d.containers.ObjectContainer3D...; import away3d.core.math.Number3D, import caurina.transitions * 
 Trinn 9:.. Setup Variabler 
 
 Etter import våre klasser skal vi definere våre variabler som skal brukes i de neste trinnene 
 Div scene: Scene3D; Var kamera: Camera3D; Var Vis: View3D; Var totalchildren: int = 10var kort: Arrayvar teksturer: Array = [ny texture0 (0,0), ny texture1 (0,0), ny texture2 (0,0 ), ny texture3 (0,0), ny texture4 (0,0)] Var backtexture: BitmapData = new textureback (0,0) Var woodtexture: BitmapData = new texturewood (0,0) Var cardwidth: Number = 110var cardheight: Antall = 150var xoffset: Number = 10var yVerdi: Number = 10var cardsholder: ObjectContainer3Dvar selectedCard1: Planevar selectedCard2: Planevar disableMouseEvents: Boolean = false 
 teksturer utvalg holder våre tekstur bilder. Å legge ved bilder til vår scene fra biblioteket vi bruker denne metoden: 
  Var imageData: BitmapData = LibraryLinkageName (0,0) 
. Vi bruker den samme tilnærmingen til bordet vårt og bakside av kortene. xoffset og yVerdi definerer avstanden mellom kortene 
 
 Trinn 10:.. Setup Away3D 
 
 Først av alt vi trenger for å bygge Away3D 
 funksjon initAway3D (): void {scene = new Scene3D ( ); Kameraet = new Camera3D (); camera.y = 700 camera.z = 500 camera.lookAt (ny Number3D (0,0,0)) view = new View3D ({scene: scene, kamera: Kameraet}); view.x = stage.stageWidth /2 view.y = stage.stageHeight /2 addChild (vis); } 
 den første linjen i vår funksjon skaper 3D-scenen. Vi vil legge til 3D-objekter inn i den. Etter at vi skaper kameraet. Vi skal flytte den bakover og oppover litt. Ved å gjøre dette, vil vi kunne se kortene bedre når vi spiller spillet. Så får vi sentrere den. Til slutt lager vi visningen og sette den i midten av scenen 
 
 Trinn 11:. Opprette Table 
 
 I dette trinnet vil vi lage tabellen: 
 funksjon createGround () : void {var kube: Cube = new Cube ({width: 680, dybde: 400, høyde: 20, pushback: true, ownCanvas: true, material: ny BitmapMaterial (woodtexture)}) cube.y = -20 scene.addChild (kube)} 
 For å gjøre det ser mer realistisk at vi bruker en kube i stedet for a Plane. Det viktigste poenget her er å bruke pushback eiendommer i Cube å gjøre det synlig under kortene. Materialet vi bruker for Cube er BitmapMaterial. Dette er den beste måten å bruke bitmaps som teksturer 
 
 Trinn 12:. Opprette One Card 
 
 Først vil vi lage en holder. Det vil være to plan i denne holderen. En av disse flyene er forsiden av kortene og den andre er på baksiden. Vi vil bruke holderen til å rotere eller flytte kortene 
 funksjon createCard. (Tekstur: BitmapData, id: int): ObjectContainer3D {var kort: ObjectContainer3D = new ObjectContainer3D () Var front: Plane = new Plane ({width: cardwidth, høyde: cardheight, materiale: ny BitmapMaterial (tekstur, {glatt: true})}) Var tilbake: Plane = new Plane ({width: cardwidth, høyde: cardheight, materiale: ny BitmapMaterial (backtexture, {glatt: true} )}) front.rotationY = 180 back.rotationZ = 180 back.rotationY = 180 back.extra = {} back.extra.id = id back.extra.targetCard = kort back.addOnMouseDown (onBackClicked) card.rotationZ = 180 kort .addChild (foran) card.addChild (tilbake) card.ownCanvas = true retur kortet} 
 I denne funksjonen er vi gjenskape det som diagrammet viser. Vi bør bruke rotasjon for å plassere kortene med ansiktet ned. Vi er ikke å legge et arrangement til innehaveren, fordi vi bare klikk på baksiden forsiden av kortet. Av denne grunn legger vi en mousedown hendelse til baksiden Plane eneste. 
 
 Hver 3D objekt i Away3D kan ha ekstra variabler og hver farge i spillet vårt har en unik id. Vi vil legge til denne id variabelen til "ekstra" propertie av ryggen Plane. Vi vil bruke IDer for å sjekke om de valgte to kortene har samme farge eller ikke 
 
 Trinn 13:. Lage Alle kort 
 
 Etter kort funksjon for opprettelse, er vi klare til å lage alle av dem 
 funksjons initCards (): void {kort = new Array () for. (var i: int = 0, jeg < textures.length; i ++) {var card1: ObjectContainer3D = createCard (teksturer [i], jeg ) Var card2: ObjectContainer3D = createCard (teksturer [i], i) cards.push (card1) cards.push (card2)}} 
 Vi skyver alle våre kort til en kort array. Det vil være to kort av hver farge (to blå, to røde og to grønne). På grunn av dette lager vi to kort med samme farge og deretter presse dem til array 
 
 Trinn 14:. Tilfeldig kort 
 
 Neste trinn er å randomisere kortene rekke 
 funksjons randomizeCards (. ): void {var newArray: Array = new Array (); while (cards.length > 0) {newArray.push (cards.splice (Math.floor (Math.random () * cards.length), 1) [0]); } Kort = newArray} 
 Det er så enkelt. Først skaper vi en ny array. Da er vi plukke en tilfeldig element fra kort array, presser det til det nye utvalget og fjerne den fra kort array. Etter at mens loop har avsluttet vi utjevne kort array til vår nye utvalget. Nå har vi en randomisert utvalg 
 
 Trinn 15:. Legge kort til Scene 
 
 Nå har vi randomisert kortene våre, slik at vi kan legge dem til åstedet. Vi vil bruke et rutenett system for sine posisjoner 
 funksjon addCardsToScene (): void {cardsholder = new ObjectContainer3D () Var currentindex: int = 0 for (var i: int = 0; i < 2; i ++) {for ( Var b: int = 0; b < 5; b ++) {kortene [currentindex] .x = b * (cardwidth + xoffset) + cardwidth /2 kort [currentindex] .z = i * (cardheight + yVerdi) + cardheight /2 cardsholder.addChild (kort [currentindex]) currentindex ++}} Var cardswidth: Number = (5 * cardwidth) + (4 * xoffset) Var cardsheight: Number = (2 * cardheight) + (1 * yVerdi) cardsholder.x = -cardswidth /2 cardsholder.z = -cardsheight /2 scene.addChild (cardsholder)} 
 Den første "for" loop er for x-aksen og den andre er for y-aksen. Vi legger kortene til en ny hoved holder, så når vi ønsker å rotere eller flytte kortene vi kan bare bruke hovedholderen. Da vi satt kortene ved hjelp av bæresystem. For at vi bruker cardwidth, cardheight, xoffset og yVerdi variabler. Kortene må være i midten av bordet. For å gjøre dette trenger vi å få bredde og høyde verdier av de viktigste kortene holder. Dette diagrammet viser hvordan vi får dem 
 
 Etter at vi får dem vi flytter hovedholderen inn i midten av bordet 
 
 Trinn 16:.. Mus ned Hendelses 
 
 Vi har lagt kortene på scenen. Vårt neste skritt vil være å skape den mousedown event funksjon 
 funksjon onBackClicked (e: Hendelses). {If (disableMouseEvents == false) {if (selectedCard1 == null) {selectedCard1 = e.currentTarget som Plane} else {if ( selectedCard2 == null) {selectedCard2 = e.currentTarget som Plane waitForDecision () disableMouseEvents = true}} Tweener.addTween (e.currentTarget.extra.targetCard, {y: 50, rotationZ: 0, tid: 1})}} < p> Først sjekker vi disableMouseEvents. Det betyr at hvis vi har tillatelse til å klikke kortene vi fortsette, men hvis vi ikke gjør det ingenting skjer. Hvis det første kortet ikke er valgt, klikket kortet er vår første kortet. Hvis første kortet er ikke null, så dette klikket kortet er vårt andre kort. 
 
 Våre spillet må du lage en desicion etter at vi velger de to kortene som om de er like eller ikke. Av denne grunn våre "waitForDecision" -funksjonen er i gang og vi setter disableMouseEvents å true. Så mens spillet venter på en avgjørelse, vil ingenting skje hvis vi klikker på et kort. 
 
 rotationZ tilhører våre kortet klikket vil være 180 grader med Tweener, så vi kan se fargen på kortet. 
 
 Trinn 17: Vent til en beslutning 
 
 Når de to kortene er valgt, venter spillet litt (dette er bare for moro skyld) 
 funksjon waitForDecision (). void {var tidtaker : Timer = new Timer (1000,1) timer.addEventListener (TimerEvent.TIMER, makeDecision) timer.start ()} 
 Som du kan se, er dette en enkel Timer usege. Den venter 1000 miliseconds (1 sekund). Etter det, utløser Timerevent den makeDecision funksjonen til å kjøre 
 
 Trinn 18:. Ta en beslutning 
 
 Vi ventet 1 sekund så nå er det på tide å ta en beslutning. Hvis ID verdiene av kortene er de samme de vil forsvinne, hvis de ikke vil vende ansiktet ned igjen 
 funksjon makeDecision (e: Hendelses): void {if (selectedCard1.extra.id == selectedCard2.extra.id) { Tweener.addTween(selectedCard1.extra.targetCard,{alpha:0,time:0.2,onComplete:removeCard,onCompleteParams:[selectedCard1.extra.targetCard]}) Tweener.addTween(selectedCard2.extra.targetCard,{alpha:0,time:0.2,onComplete:removeCard,onCompleteParams:[selectedCard2.extra.targetCard]}) } else {Tweener.addTween (selectedCard1.extra.targetCard, {y: 0, rotationZ: 180, tid: 1}) Tweener.addTween (selectedCard2.extra.targetCard, {y: 0, rotationZ: 180, tid: 1} )} disableMouseEvents = false selectedCard1 = null selectedCard2 = null} 
 Vi gjør akkurat det i denne funksjonen. Vi sjekker de id verdiene av to utvalgte kort. Hvis de er like, vil alfa verdier av dem endre 0 med Tweener (vi gjøre dem forsvinne). Når dette tween er ferdig, blir removeCard funksjonen kalles. Parameteren av removeCard funksjon er kortene selv. Vi gjør dette for de to kortene samtidig. Hvis de ikke er det samme, vi sender dem til sine gamle posisjoner og gjøre dem med ansiktet ned. Uansett desicion er, selectedCard1 og selectedCard2 vil bli satt til null 
 
 Trinn 19:. Fjerne kort 
 
 Vi må fjerne de to kortene fra våre viktigste kort holderen når de forsvinner, fordi vi don 't trenger dem lenger 
 funksjon removeCard (e: ObjectContainer3D):. void {cardsholder.removeChild (e) totalchildren-- if (totalchildren == 0) {trace ("vinne")}} 
 Etter at de er kastet ut av scenen, verdien av totalchildren reduseres en etter en. Når den når 0 betyr dette at du har vunnet spillet 
 
 Trinn 20:!. Rende 
 
 Det siste trinnet er å skrive en loop funksjon å gjengi Away3D i runtime 
 funksjon startToRender ( ): void {addEventListener (Event.ENTER_FRAME, render); } funksjon render (e: Hendelses): void {view.render ();} 
 Trinn 21: Ring alle funksjoner 
 
 Vi er klare til å ringe alle de funksjonene vi har written.
initAway3D()createGround()initCards()randomizeCards()addCardsToScene()startToRender()
Now teste det og spille spillet ditt :) 
 
 Konklusjon 
 
 I denne leksjonen vi lærte å legge variabler og mouseEvents å Away3D stedene. Med disse ferdighetene vi laget et spill, og som du kan se det var ikke så vanskelig :) 
 
 Jeg håper du likte denne opplæringen, takk for lesing! 

