Create en musikal Bursdagskort med Papervision3D
Del
Del
Del
Del
Dette Cyber mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.
Det er ActiveTuts + 's første bursdag! La oss feire med å lage en musikalsk 3D bursdagskort ved hjelp Papervision3D og TweenMax
Trinn 1:. Filer Setup
Start med å opprette en ny mappe (dette vil være prosjektets rotmappen) og opprette en ny AS3 FLA inni den mappen, kalt Main.fla. Dette vil inneholde all UI vi trenger for å lage kortet
For denne opplæringen vi trenger to populære Flash biblioteker:. Papervision3D og TweenMax. Last ned Papervision (Jeg bruker versjon 2.1.932) og trekke ut com Hotell og nochump Nå opprette en tom AS fil.; lagre det som "CardViewport.as" i prosjektets rotmappen. Dette vil være vår Papervision3D view inneholder kortet. Lag en annen tomt AS fil i samme mappe som heter "Main.as." Dette vil være et dokument klasse. (? Ikke sikker på hvordan du bruker et dokument klasse Les denne rask innføring.) mappestrukturen skal se slik ut: Åpne opp Main.fla og redigere scenen for å gjøre det 500x440 med 30 bilder per sekund frame rate. Sett dokumentet klassen til Main: Vi trenger bare to lag for denne opplæringen: I view lag lage en rektangulær form. Størrelsen det til størrelsen på scenen og flytte den til posisjon 0,0. Hit F8 for å konvertere formen til en MovieClip symbol. Kryss av i boksen for å eksportere for Actionscript og legge klassenavnet CardViewport. Det vil koble til klassen vi skal bygge senere Nå kan du klikke på synsfeltet MovieClip og gi den en forekomst navnet "view" Åpne viewfilmklipp symbol og lage hva bakgrunnen du liker. Dette er hva jeg gjorde. Et par gradient figurer, en for himmelen og en for bakken og ActiveTuts + logo sentrert på himmelen på knappen sjiktet skape en rektangulær form. Konvertere den til et filmklipp symbol og kaller det "open_mc"; sørg for at du gir det samme instans navn. Inne open_mc lage en tekstfeltet. Sett den til å være dynamisk, gir det en forekomst navn label_txt og bygge inn skrifter ved å klikke på "Character Inkludering" og velge alfabetet du vil bruke. La det se slik du vil. Jeg bygde min med en gradient og noen diagonale linjer på tvers: MERK: Jeg eier ikke rettighetene til å distribuere standard 07_66 Photoshop tid: Vi skal bygge våre kort med fire fly (flate rektangler) mot hverandre. Til det trenger vi fire forskjellige bildefiler for å kartlegge i disse flyene. Våre flyene vil være 700x900 og våre fire bilder vil derfor også være av denne størrelsen. Grunnen til dette er at størrelsen flyene blir flytende på plass 3d noen avstand fra kameraet; de trenger å være stor, slik at vi kan se dem. Navngi bildene "page_1_front.jpg", "page_1_back.jpg", "page_2_front.jpg", "page_2_back.jpg" og sette dem i rotkatalogen på prosjektet Her er bildene mine. Disse bildene er tatt med i kildehovedglidelåsen, men du kan også laste dem direkte hvis du foretrekker .. Gjør det samme for en lyd hvis du ønsker å legge til en. Scott Wills fra audiojungle var snill nok til å sette denne funky spor sammen for oss Åpne CardViewport.as. Jeg skal bruke FlashDevelop å kode, men du kan bruke Flash hvis du foretrekker Lag en pakke og importere de klassene vi trenger: Sett opp de private variabler vi trenger for CardViewport: Her er den funksjonen som skal kjøres når CardViewport opprettes: For å bli kvitt noen feil om hvordan z-depth beregnes i vår scene må vi endre gjengi typen til en som kan rette . Den QuadrantRenderEngine aksepterer en parameter: korreksjon type. Vi skal korrigere z filter denne gangen, bruk denne klokt som det kan hog din CPU i komplekse situasjoner. Selv om vi ikke ser det fjerde flyet (baksiden av kortet) bestemte jeg meg for å legge det allikevel bare i tilfelle du ønsker å leke seg med scene <. br> Vi skal bruke en BitmapFileMaterial, ved å sette "presis" til sann jeg forbedre den generelle kvaliteten, men Her skaper vi de fire flyene som utgjør våre kort, arrangere dem i et par beholdere slik at de fremstår som to sider Anmeldelser private funksjons setPlanes (): void {//Oppretter forsiden Plane Cover front_cover = new Plane (front_cover_img, 700, 900, 3, 3); front_cover.z = 0; front_cover.x = 350 //dette utlignet vil bli brukt senere, slik at vi kan åpne kortet //Oppretter innsiden av front Plane front_inside = new Plane (front_inside_img, 700, 900, 3, 3); front_inside.z = 0; front_inside.rotationY = 180; //roteres 180 grader, slik at vi kan se det fra innsiden front_inside.x = 350 //dens nøyaktig halve bredden av flyet //Oppretter en wrapper objekt, slik at vi kan rotere forsiden fra en annen aksen //at av sidene. Det er enklere på denne måten som du ikke trenger å rote med etableringen //koordinater, og vi kan bare oppveie det. front_container = new DisplayObject3D (); front_container.addChild (front_cover); front_container.addChild (front_inside); front_container.x- = 350 //her er vi utligner den //Gjenta prosessen for den andre siden back_inside = new Plane (back_inside_img, 700, 900, 3 3,); back_inside.z = 0,1; back_inside.x = 350 back_cover = new Plane (back_cover_img, 700, 900, 3, 3); back_cover.z = 0,1; back_cover.rotationY = 180; back_cover.x = 350 back_container = new DisplayObject3D (); back_container.addChild (back_inside); back_container.addChild (back_cover); back_container.x - = 350 //Og etter alt tilsett foran og bak containere til hoved wrapper og tilsett wrapper til scenen. card_container = new DisplayObject3D (); card_container.addChild (front_container) card_container.addChild (back_container) scene.addChild (card_container); } Legg merke til at dette er en offentlig funksjon, slik at vi kan få tilgang til det gjennom hoveddokumentet klassen når vi klikker på knappen: Samme for lukking av kortet: Dette kalles når musen beveges mens kortet er stengt: Dette kalles når musen beveges mens kortet er åpent: Dette kalles når kortet blir klikket for å åpne: Det siste trinnet er åpenbart rende ut synsfeltet, etter at vi går videre til dokumentet klassen Det er slutten av klassen. Ikke glem å legge til avsluttende klammeparentes Vi vil ikke endre noe annet i CardViewport klassen, så gjerne få kilde fra zip-filen og sammenligne den med din egen Dette trinnet er ganske enkel, vi trenger bare å knytte det åpne kortet og nære kort handlinger til knappen. Før det, la oss importere følgende klasser i vår pakke: Igjen, ikke noe fancy, strekker det MovieClip og skaper en Sound objekt: Her er et lite tips for dere: å hindre null feil initial dine kommandoer bare etter at klassen har vært lagt til scenen. Denne måten er du sikker på at alt du prøver å få tilgang til stede ... og dette er den funksjonen som skal kjøres når dokumentet klassen har blitt lagt til scenen: Denne funksjonen vil bli kjørt når kortet blir klikket hvis det er stengt: Dette er i utgangspunktet den samme som openCard (), men i revers.;) Ferdig. Ingen hemmeligheter i dette dokumentet klassen, det er ganske rett frem. Ikke glem å legge til avsluttende klammeparentes. Jeg vil gjerne se deg utvikle seg fra denne opplæringen tar opp noen av de små tipsene jeg ga deg, fra ADDED_TO_STAGE til displayObject3d wrapper, for å bruke en tweening klasse til å rotere og flytte en 3d objekt. Ta dette kortet, og gjøre den til din egen. Happy birthday Activetuts +! Jeg håper du likte denne opplæringen, takk for lesing!
mapper fra zip til prosjektets rotmappen. Last ned TweenMax (Jeg bruker versjon 11), og pakke ut zip til prosjektets rotmappen samt
Trinn 2: Stage Setup
Trinn 3: Lag Setup
Kortet container som vil være befolket av vår papervision
Knappene lag som vil utløse en åpne /lukke-aksjon på kortet
Trinn 4: View Setup
Trinn 5:.. View Bakgrunn
Trinn 6: Button Setup
, skriften jeg bruker i dette prosjektet. Sorry for at
Trinn 7:. Eiendeler
Trinn 8:. CardViewport.as Importen
pakken {//grunnleggende klasser importere flash.display.Sprite;. import flash.events.Event; import flash.events.MouseEvent; //papervision klasser importere org.papervision3d.objects.primitives.Plane; import org.papervision3d.materials.BitmapFileMaterial; import org.papervision3d.view.BasicView; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.render.QuadrantRenderEngine; //tweening motor import com.greensock.TweenMax;
Trinn 9: CardViewport.as Private Variabler
public class CardViewport strekker BasicView //BasicView sin en klasse som inneholder en grunnleggende view oppsett for vår scene {//Oppretter 4 flyene privat Var front_cover: Plane; private Var front_inside: Plane; private Var back_cover: Plane; private Var back_inside: Plane; //Oppretter 4 materialer privat Var front_cover_img: BitmapFileMaterial; private Var front_inside_img: BitmapFileMaterial; private Var back_cover_img: BitmapFileMaterial; private Var back_inside_img: BitmapFileMaterial; //Oppretter forsiden container, som vil hekker 2 flyene privat Var front_container: DisplayObject3D; //Oppretter tilbake siden container, som vil hekker den andre 2 flyene privat Var back_container: DisplayObject3D; //Oppretter et kort container som vil hekker foran container og tilbake container private Var card_container: DisplayObject3D; }
Trinn 10: CardViewport.as Constructor
offentlig funksjon CardViewport () {super (); //for å bli kvitt noen feil om hvordan z-depth beregnes i vår scene //vi må endre gjengi typen til en som kan rette det setRenderType (); //Instantiates materialene og setter sine egenskaper setMaterials (); //Instantiates flyene, legger materialene til flyene, legger flyene til pakkemaskiner (containere) setPlanes (); //gjør kameraet hver ramme stage.addEventListener (Event.ENTER_FRAME, render); //pinnen flyene basert på musens posisjon stage.addEventListener (MouseEvent.MOUSE_MOVE, positionPlanes); }
Trinn 11: CardViewport.as Render Type
Privat funksjon setRenderType () {this.renderer = new QuadrantRenderEngine (QuadrantRenderEngine.CORRECT_Z_FILTER)}
Trinn 12: CardViewport.as Materialer Setup
jeg også bruker mer CPU kraft
privat funksjons setMaterials (). void {//forside front_cover_img = new BitmapFileMaterial ("page_1_front.jpg", true); front_cover_img.doubleSided = false; front_cover_img.fillAlpha = 1,0; //Front Inside Page front_inside_img = new BitmapFileMaterial ("page_1_back.jpg", true); front_inside_img.doubleSided = false; front_inside_img.fillAlpha = 1,0; //Tilbake Inside Page back_inside_img = new BitmapFileMaterial ("page_2_front.jpg", true); back_inside_img.doubleSided = false; back_inside_img.fillAlpha = 1,0; //Back Cover Page back_cover_img = new BitmapFileMaterial ("page_2_back.jpg"); back_cover_img.doubleSided = false; back_cover_img.fillAlpha = 1,0; }
Trinn 13:. CardViewport.as Planes Setup
Trinn 14: CardViewport.as openCard ()
offentlig funksjon openCard () {//Når vi åpner kortet må vi fjerne muse lyttere fra scenen fordi //når vi mus flytte vi roter ting, noen ganger beholderne noen ganger flyene selv, //derfor vi ikke kan rotere begge samtidig som vi vil ende opp med animasjons feil stage.removeEventListener (MouseEvent.MOUSE_MOVE, positionPlanes); //vi trenger å tilbakestille fly posisjoner inne i containere resetPlanesPosition (); //vi roter foran containeren 180 grader og setter x til 0, //fordi vi utlignet flyene tidligere det nå roterer deretter. TweenMax.to (front_container, 1.4, {rotationY: 180, x: 0, onComplete: function () {stage.addEventListener (MouseEvent.MOUSE_MOVE, positionContainer);}}); TweenMax.to (back_container, 1.4, {x: 0}); //etter rotasjonen vi legge til en ny lytter til musen. denne gang flytte hovedbeholderen. }
Trinn 15: CardViewport.as closeCard ()
offentlig funksjon closeCard () {//når vi lukker kort trinnene er svært ligner på når vi åpner. stage.removeEventListener (MouseEvent.MOUSE_MOVE, positionContainer); //forskjellen er der vi nullstille hovedbeholderen rotasjon card_container.rotationY = card_container.rotationX = 0 //vi nullstille foran og bak containere 'x og rotationY egenskaper TweenMax.to (front_container, 1.4, {rotationY: 0, x: - 350, onComplete: function () {stage.addEventListener (MouseEvent.MOUSE_MOVE, positionPlanes);}}); TweenMax.to (back_container, 1.4, {x: -350}); //og etter animasjonen vi legger den forrige musen flytte arrangementet tiltak for å posisjonere flyene}
Trinn 16: CardViewport.as Posisjons Planes
private funksjons positionPlanes (event: Aktivitet): void {//den roterer mellom -25º og 25º avhengig av musen posisjon front_cover.rotationY = back_inside.rotationY = (stage.mouseX /stage.stageWidth * 50) -25 front_cover.rotationX = front_inside.rotationX = back_cover.rotationX = back_inside.rotationX = (stage.mouseY /stage.stageHeight * 50) - 25 //vi trenger bare å legge 180 til ansiktene som er ment å være mot oss front_inside .rotationY = back_cover.rotationY = ((stage.mouseX /stage.stageWidth * 50) - 25) + 180}
Trinn 17: CardViewport.as Posisjon Container
privat funksjon positionContainer (hendelse: Hendelse): void {//akkurat som flyene. den roterer mellom -25º og 25º avhengig museposisjonen card_container.rotationY = (stage.mouseX /stage.stageWidth * 50) -25 card_container.rotationX = (stage.mouseY /stage.stageHeight * 50) - 25.}
Trinn 18: CardViewport.as Tilbakestill Planes
privat funksjon resetPlanesPosition () {//funksjonsnavnet sais det hele, roterer den flyene tilbake til sin opprinnelige opprettet stilling front_inside.rotationY = back_cover.rotationY = 180 front_cover.rotationY = back_inside.rotationY = front_cover.rotationX = front_inside.rotationX = back_cover.rotationX = back_inside.rotationX = 0}
Trinn 19: CardViewport.as Render
privat funksjon render (hendelse: Hendelse):. void {//singleRender er en BasicView funksjon som aktiverer render i den gitte tid. singleRender (); }
Trinn 20:. CardViewport.as Full Kode
Trinn 21:. Main.as Importen
pakke {import flash.display.MovieClip; import flash.events.Event; import flash.events.MouseEvent; import flash.media.Sound; //husker birthday.mp3? det vil bli lagt her import flash.net.URLRequest;
Trinn 22: Main.as Constructor
public class Hoved strekker MovieClip {private Var birthday_song: Sound}
Trinn 23: Main.as viktigste funksjon
offentlig funksjon main (). Void {addEventListener (Event.ADDED_TO_STAGE, init)}
Trinn 24: Main.as Init funksjon
privat funksjon init (hendelse: Hendelse): void {removeEventListener (Event.ADDED_TO_STAGE, init) //vi trenger ikke dette lenger open_mc.label_txt.text = //etiketter på knappen open_mc.buttonMode = true "_ OPEN CARD _!"; //Setter knappen for å opptre som en knapp open_mc.mouseChildren = false; //Deaktiverer mus hendelser på open_mc barn open_mc.addEventListener (MouseEvent.CLICK, openCard) //Legger en hendelse lytteren til museklikk}
Trinn 25: Main.as Klikk for å åpne Handler
privat funksjon openCard (event: MouseEvent): void {open_mc.removeEventListener (MouseEvent.CLICK, openCard); //fjerner den åpne lytteren viewport.openCard (); //tilgangsvisningsfeltet for å åpne kortet (husker vi satt den til offentligheten tidligere?) open_mc.label_txt.text = "_! CLOSE CARD! _" //endrer etiketten open_mc.addEventListener (MouseEvent.CLICK, closeCard) //legger en lytter å lukke kortet på museklikk birthday_song = new Sound (ny URLRequest ("birthday.mp3")); //laster bursdag sang birthday_song.play (); //spiller bursdagssangen}
Trinn 26: Main.as Klikk for å lukke Handler
Privat funksjon closeCard (event: MouseEvent): void {open_mc.removeEventListener (MouseEvent.CLICK, closeCard) viewport.closeCard (); "! _ OPEN CARD _" open_mc.label_txt.text = open_mc.addEventListener (MouseEvent.CLICK, openCard)}
Trinn 27: Main.as fullbyrde
Konklusjon