Building en 3D Visittkort Med Pure AS3
en
Del
Del
Del
Dette Cyber Monday Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.
I denne opplæringen vil vi bygge en 3D visittkort. Vi vil ikke bruke Away3D, Alternativa, Yogurt3D, Sandy3D, Papervision3D eller andre 3D-motor bygget for Flash. Vi vil bare bruke 3D-funksjonene i Flash Player 10.
Endelig resultat Forhåndsvisning
La oss ta en titt på det endelige resultatet vi skal jobbe mot :
Klikk på den
Trinn 1:!. Opprett ny FLA
Opprett en ny Actionscript 3.0 fil
Trinn 2: Edit Profile
Før redigering, la oss redde vår dokument som "BusinessCard3D.fla" i en mappe du vil.
Etter å ha lagret dokumentet, skriv "BusinessCard3D" inn Klasse feltet for å sette et dokument klasse. Hvis du ikke vet hva Document Class er eller hvordan den brukes, kan du lære av denne hurtig Tip.
Trinn 3: Lage Dokument Class
Vi har angitt navnet på dokumentet klassen, men vi har ennå ikke opprettet den.
I Profil delen klikk den lille pennen ikonet nærheten av "BusinessCard3D".
I denne opplæringen vil vi bruke Flash Professional. Klikk på OK-knappen, og du vil se en ny Actionscript-fil foran deg. Du vil se en enkel klasse:
pakke {import flash.display.MovieClip; public class BusinessCard3D strekker MovieClip {offentlig funksjon BusinessCard3D () {//konstruktør kode}}}
Ta ut "//konstruktør koden" linjen og lagre dette som "BusinessCard3D.as" inn i samme mappe som inneholder "BusinessCard3D.fla "
Trinn 4:. Importer kort Tekstur
Du trenger to visuelle å bygge et visittkort. En av dem er at den fremre og den andre er for baksiden av kortet. Jeg laget noen minimale kort for denne opplæringen:
I utgangspunktet kopiere disse bildene og lime dem inn i Flash dokument. De vil bli lagt til scenen automatisk. Nå fjerne dem og åpne Bibliotek-panelet:
Vi må sette opp sine ledd navnene slik at vi kan bruke dem i runtime. Dette betyr, vil vi eksportere dem for Actionscript. Det er en veldig rask måte å gjøre dette på.
Som standard Heis delen av bildene er tomme. Klikk på blank er av den Heis delen av CardBack.png:
Etter å ha gjort det, skriv "CardBack":
Gjør det samme for CardFront.png bildet. Etter at du har angitt ledd navn, bør Bibliotek-panelet ser slik ut:
Ja. Nå den morsomme delen. Vi er nå klar til å begynne koding :)
Trinn 5: Innstilling Importen
Først importerer vi noen andre klasser som vi vil bruke i følgende trinn:
import flash .display.Bitmap, import flash.display.DisplayObject, import flash.display.Sprite, import flash.events.Event, import flash.geom.Point;
Sett disse linjene mellom pakken {og public class BusinessCard3D strekker Sprite linjer .
Trinn 6: Oppsett Variabler
Etter import klasser, la oss sette opp våre variabler. Sett disse linjene like over offentlig funksjon BusinessCard3D () linje:
private Var Visittkort: Spriteprivate Var frontHolder: Spriteprivate Var backHolder: Sprite private Var frontTexture: Bitmapprivate Var backTexture: Bitmap private Var p1: Pointprivate Var p2: Pointprivate Var p3: Point private Var p1_: Point = new punkt (0,0) private Var p2_: Point = new Point (100,0) private Var p3_: Point = new Point (0100)
Som du kan gjette Visittkort holder våre to andre kort. Det er den viktigste holderen.
frontHolder holder frontTexture, backHolder holder backTexture.
frontTexture og backTexture er punktgrafikk fra biblioteket.
Vi kunne bruke bare én hovedholder og legge bilder inn i det. Men problemet med det er det kan forvirre nybegynnere. Siden vi skal rotere baksiden av kortet 180 grader og siden registreringen punktet i Bitmap klassen er øverst til venstre, ville vi også må endre sin x eiendom. Ved å legge en annen holder vi bare nødt til å endre sin rotasjon
Trinn 7:. Sette Images /Tekstur
Etter å ha satt opp variablene, la oss skrive vår første funksjon. Det blir i utgangspunktet bilder fra biblioteket som BitmapData objekter, skaper frontTexture og backTexture punktgrafikk fra dem.
Offentlig funksjon getTextures () {frontTexture = new Bitmap (ny CardFront (0,0)) backTexture = new Bitmap (ny CardBack (0 , 0))}
Først får vi CardFront image ved å skrive: ny CardFront (0,0)
Dette er den eneste måten å få en BitmapData av et bilde fra biblioteket. Vi kan ikke bruke bare ny CardFront (0 , 0) returnerer oss en BitmapData og at BitmapData brukes i Bitmap å skape frontTexture. Vi gjør det samme for backTexture og våre teksturer er klar Nå skal vi skrive våre andre funksjonen. Denne funksjonen bygger våre holdere og legger våre teksturer inn holdere: Som du ser, vi først opprette nye Sprites som er det perfekte valget for innehaveren formål. Så vi legger våre teksturer i tekstur holdere. Så vi legger disse strukturholdere inn i hovedholderen. Til slutt legger vi hoved holder til scenen, på scenen. Vi vil bruke hovedholderen som et visittkort Vi trenger å endre rotasjonen og x, y koordinatene kortene Først roter vi baksiden av kortet 180 grader. Deretter setter stillingene til begge kortene. Dette er faktisk et enkelt triks; vi faktisk satt registreringspunkt innehaveren av kortene til sitt senter. Dette er på grunn av perspektivet til standard 3D scene i vårt dokument Dette er uten tvil det vanskeligste skrittet i vår veiledning. Vi bygger et visittkort, og når vi ser på forsiden av kortet, bør baksiden av kortet ikke bli sett. Hvordan kan vi gjøre dette? Vi kan kanskje skrive litt om forholdene ved å bruke rotasjoner av hoved holder ... men det er en enklere måte. Tenk deg at vi har to røde punkter og ett blått punkt på en flate. Nå forestille seg at vi har en uendelig linje som går gjennom de to røde punkter. Denne linjen deler overflatene til to sider. Sjekk ut bildet under: Som du ser, har blå punkt to sjanser. Det kan være på den side av grønn eller på siden av gult. Hvis vi kan finne ut hvor det blå punktet er så kan vi løse vårt problem Nå la oss snakke om 3D I dette bildet har vi en 3D-plan. Tenk deg at det er rotert i Y-aksen litt (slik at kanten på venstre side er lenger vekk fra deg enn kanten på høyre side). La oss sette røde punkter og en blå punkt på hjørnene av flyet. Ser du uendelig linje? Sjekk ut bildet under: Det er faktisk det samme som det første bildet. Hvis det blå punktet nå går til den andre siden av linjen, betyr det at den andre siden av planet blir sett. Derfor bruker posisjonene til bare tre poeng, kan vi finne ut hvilke ansiktet av flyet er mot oss. Denne metoden brukes i Away3D, PaperVision, Yogurt3D, Alternativa og andre motorer og i utgangspunktet forbedrer ytelsen. For denne metoden vil vi bruke en funksjon: Denne funksjonen lager tre poeng i kortet (vår planet). Og deretter returnerer oss plasseringen av det tredje punktet (blå en på tegninger). Hvis den returnerer sant så det betyr at vi ser forsiden av kortet (fly). Hvis ikke, betyr det at vi ser baksiden av kortet (fly) Nå kan vi endelig skrive vår siste funksjonen. Denne funksjonen utgangspunktet roterer vårt visittkort og sjekker synligheten av ansiktene De to første linjene angi posisjonen for hoved holderen til sentrum. Dette er på grunn av et perspektiv av standard 3D scene i vår dokumentet. Så vi roter vår hovedholderen ved hjelp av muse koordinater. Vi legger en tradisjonell og enkel glatt effekt for det. De to siste linjene lage kort synlig når vi shoud se dem Vi er klare. La oss kalle våre funksjoner i rekkefølge: Vi legger også til en ENTER_FRAME hendelse for å utløse gjengi funksjon hver ramme . Endelig er vi klare til å teste vår film Beveg musen, og du vil se at visittkortet vil bli rotert også. Vi testet våre kort. Nå la oss gå litt lenger. De fleste av dere, og jeg personlig, mener at muse rotasjoner er kjøligere, men fra mine erfaringer med 3D, kan de forvirre brukerne. Vi vil derfor konvertere dette til en enklere animasjon. Når vi klikker på kortet vil det dreie seg Først, for vår animasjon vi skal bruke Tweener. Det er veldig enkelt. Så, laste ned den nyeste Tweener versjonen fra code.google.com. Jeg bruker versjon 1.33.74, Actionscript 3 (Flash 9+). Pakk ut ZIP-filen og flytte "caurina" -mappen til mappen som inneholder vår Flash dokument. Våre første linjene var i ferd med å importere klasser. Vi vil importere Tweener og også MouseEvent. I vår render () -funksjonen, kortets rotasjon var direkte relatert til muse koordinater. Men vi ønsker ikke dette nå. Vi vil i utgangspunktet klikk på kortet, og det vil snu. Så, fjerne de markerte linjene: Vi vil legge til en ny variabel, frontFace. Denne typen er boolsk. Når brukeren klikker på kortet vil vi rotere våre kort til 180 eller 0 avhengig av verdien av frontFace Nå skriver vi vår endelige funksjon. Når vi klikker på kortet denne funksjonen vil bli utløst Vi først se på frontFace variabel. Hvis det er sant så betyr det at vi nå ser forsiden av kortet. Hvis det er falsk så betyr det vi ser baksiden av kortet. Når vi ser på forsiden av kortet, i utgangspunktet sier vi "roter det til 180 grader", slik at vi kan se baksiden av kortet. Vi bruker den samme ideen når vi ser baksiden av kortet (i så fall, vi roter det til 0 grader) Vårt endelige linjen er å legge en MouseEvent lytteren til å utløse onDown () -funksjonen vi nettopp skrev. Vi legger det til vårt visittkort. Du kan selv legge den til scenen Test filmen, og klikk på kortet. Kanskje du kan skrive en funky "Klikk for å rotere visittkortet mitt;)" setning på visuelle :) I denne leksjonen lærte vi hvordan å bygge en 3D-to- ensidig plan ved hjelp av native Flash Player 10 3D API og Actionscript 3.0. Først vi kontrollerte det ved hjelp av muse koordinater. Så byttet vi å klikke basert kontroll for ikke å forvirre brukerne. Som du ser mulighetene til 3D-funksjonen i Flash Player er ikke perfekt, men vi kan alltid formulere løsninger og kan bygge enkle 3D dynamiske animasjoner uten tredjeparts motor. Anmeldelser
BitmapData. Hvis vi hadde vært å bruke en 3D-motor så ville det sannsynligvis være nok, men med native Flash 3D må vi bruke en Bitmap objekt, så vi vil lage en Bitmap objekt fra BitmapData.
Trinn 8:. Legge Tekstur inn Holders
offentlig funksjon addIntoHolders () {Visittkort = new Sprite () frontHolder = new Sprite () backHolder = new Sprite () frontHolder.addChild (frontTexture) backHolder.addChild (backTexture ) businessCard.addChild (frontHolder) businessCard.addChild (backHolder) addChild (Visittkort)}
Trinn 9:.. Initial kortene
offentlig funksjon initCards () {backHolder.rotationY = 180 frontTexture.x = -frontTexture.width /2 frontTexture.y = -frontTexture.height /2 backTexture.x = -backTexture.width /2 backTexture.y = -backTexture.height /2}
Trinn 10:. Front Facing
Trinn 11:.?. Hvordan henger til 3D
offentlig funksjon isFrontFacing (Displayobject: Displayobject): Boolean {p1 = displayObject.localToGlobal (p1_); p2 = displayObject.localToGlobal (p2_); p3 = displayObject.localToGlobal (p3_); returnere boolsk ((p2.x-p1.x) * (p3.y-p1.y) - (p2.y-p1.y) * (p3.x-p1.x) > 0);}
Trinn 12:. Rende
offentlig funksjon render (e: Hendelses). {BusinessCard.x = stage.stageWidth /2 businessCard.y = stage.stageHeight /2 businessCard.rotationY + = (mouseX - businessCard.rotationY) * 0,2 businessCard.rotationX + = (mousey - businessCard.rotationX) * 0,2 frontHolder.visible = isFrontFacing (frontHolder); backHolder.visible = isFrontFacing (backHolder);}
Trinn 13:. Kaller alle funksjoner
offentlig funksjon BusinessCard3D () {getTextures () addIntoHolders () initCards () addEventListener (Event.ENTER_FRAME, render)}
Trinn 14:. Test Movie
Trinn 15:. Få Tweener
< h2> Trinn 16: Import Tweener og MouseEvent
import flash.display.Bitmap; import flash.display.DisplayObject; import flash.display.Sprite; import flash.events.Event; import flash.geom.Point; import caurina.transitions.Tweenerimport flash.events.MouseEvent
Trinn 17: New Rende
offentlig funksjon render (e: Hendelses) {businessCard.x = stage.stageWidth /2 businessCard.y = stage.stageHeight /2 businessCard.rotationY + = (mouseX - businessCard.rotationY) * 0,2 businessCard.rotationX + = (mousey - businessCard.rotationX) * 0,2 frontHolder.visible = isFrontFacing (frontHolder); backHolder.visible = isFrontFacing (backHolder);}
Trinn 18: Legge til ny Variable
private Var frontFace. Boolean = true
Trinn 19: MouseEvent Handler
offentlig funksjon onDown (e: MouseEvent). {If (frontFace) {Tweener.addTween (Visittkort, {rotationY: 180, tid: 1}) frontFace = false} else { Tweener.addTween (Visittkort, {rotationY: 0, tid: 1}) frontFace = true}}
Trinn 20:. Legg MouseEvent
businessCard.addEventListener (MouseEvent.MOUSE_DOWN, onDown)
Trinn 21:. Test Movie
Konklusjon