Circular Motion i AS3: Gjør One Moving Object Orbit annen
to
Del
11
Share < .no> Dette Cyber mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.
Dette innlegget er en del av en serie som heter You Do The Math.Hit Target med et dødelig Homing MissileUnderstanding transformasjoner med Matrix Matematikk
Å ha ett objekt bane et annet er en bevegelse mekaniker som er blitt brukt siden tidlig gaming era, og er det fortsatt godt med på denne dagen! I denne hurtig Tips vil vi utforske matematisk funksjon for bane, se hvordan du kan endre det, og se på praktiske bruksområder i selve spilldesign.
Endelig resultat Forhåndsvisning
Her er hva vi skal jobbe mot:
Trinn 1: Orbiting Equation
Hvis du vil lage en bane vi må definere følgende:
Origin - Objektet eller posisjonen at bane sentre på
Orbiter -. Objektet som går i bane rundt opprinnelsen
Angle -.. Den aktuelle vinkelen på Orbiter
Speed - Antall piksler vår objekt baner per bilde
Radius -.. Orbiter avstand fra opprinnelsen
Det er også nyttig å merke seg at Flash koordinatsystem er som en vanlig cartesian plan, bortsett fra at y -akse er snudd, slik at verdien øker når vi beveger oss nedover. Øverste venstre hjørne av scenen har koordinatene (0,0)
I dette bildet, 0, 90, 180, og 270 refererer til vinkler, målt i grader.
En annen ting som vi trenger for å forstå er hvordan å konvertere grader til radianer, som lett kan oppnås ved hjelp av følgende formel:
radianer = Grader * (PI /180)
Her er den faktiske bane funksjon: det krever to linjer , til en posisjon Orbiter på x-aksen og den andre for å plassere den på y-aksen:
Orbiter X-koord = Origin X-Koord + Radius * cos (radianer)
Orbiter Y-Coord = Origin Y-Coord + Radius * sin (radianer)
(I en normal kartesisk plan, blir synd anvendes for x-koord og cos brukes for y-koord, men siden våre vinkler øker klokken - på grunn av omvendt y-aksen - deres plasser er byttet)
Trinn 2: Skrive Equation i koden
Vi kan nå slå logikken i. Selve koden som vi kan bruke. Først erklære samtlige variabler:
offentlig Var Orbiter: Orbiter = new Orbiter (); //Den MovieClip Det Orbitspublic Var opprinnelse: Origin = new Origin (); //Den MovieClip Som Er Orbitedpublic Var vinkel: Antall = 0; //Initial Angle Orbiting Starter Frompublic Var hastighet: Number = 3; //Antall piksler kretset Per Framepublic Var radius: Number = 75; //Orbiting Avstand fra Origin
Neste omskrive ligningen for bruk i AS3 og sette den inn i en ENTER_FRAME hendelseshåndterer funksjon:
Var rad: Number = vinkelen * (Math.PI /180); //Konvertering grader til Radiansorbiter.x = origin.x + radius * Math.cos (rad); //Stilling Den Orbiter Sammen x-axisorbiter.y = origin.y + radius * tak i Math.sin (rad); //Stilling Den Orbiter Sammen y-aksen
Hvis du tester nå, ingenting vil skje; Dette er fordi den variable vinkelen verken øker eller minker. Derfor må vi øke eller redusere verdien:
vinkel + = hastighet; //Object vil bane clockwiseangle - = hastighet; //Object vil bane mot klokken
Hva nå hvis vi ønsker at våre Orbiter å kontinuerlig møte en retning? Vel, jeg har skrevet en ligning for å gjøre nettopp det
orbiter.rotation = (Math.atan2 (orbiter.y-origin.y, orbiter.x-origin.x) * 180 /Math.PI);!
avhengig av hvilken vei du har tegnet din Orbiter MovieClip du må trekke fra en bestemt vinkel (utenfor parentes) for å få det til å vende den riktige veien
Trinn 3:. Transforming Equation
Nå kan dette høres sprøtt, men noen av oss kanskje vil ha vår objekt bane i en ellipse. Dette er lett gjennomførbart; alt vi trenger å gjøre er å formere seg på et bestemt sted i ligningen. Multiplisere cos eller synd funksjoner ved en postive heltall vil føre til at sirkelen for å strekke. Multiplisere det med en desimal mellom 0 - 1 vil føre til at det å komprimere. Og multiplisere det med en negativ vil få den til å snu langs denne aksen: product: (2 * Math.cos (rad)); //Strekk bane langs x-aksen med en faktor på 2 (0,5 * tak i Math.sin (rad)); //Komprimere banen langs y-aksen med en faktor på 2 (dvs. halvere den) (- 3 * Math.cos (rad)); //Vend bane langs x-aksen og strekke den med en faktor på 3
Vi kan også skifte bane i alle retninger vi ønsker ved å legge til eller trekke fra ligningen på hver akse:
orbiter.x = (origin.x + radius * Math.cos (rad)) - 50; //Shift bane 50 piksler venstre på x-aksen
Hvis du ønsker å lære mer om cos, synd og ATAN2, ta en titt på trigonometri for Flash utviklere.
Trinn 4 : praktisk bruk for ligningen
Nå er alt fint og dandy, men hva kan det faktisk brukes til? ! Et bredt utvalg av ting faktisk
Hvis du noensinne har spilt Mario Kart du ville ha fått "tre skjell" powerup; disse skjellene er bane ved hjelp av denne svært teknikk. Et annet eksempel er den mye over-brukes sirkel pong spill, hvor paddle baner langs en ring på utsiden. Et tredje eksempel er fra toppen og ned zombie shooter spill:. Mange av dem inkluderer en powerup der en gruppering av tønner baner rundt spilleren og knuser noen zombier hvis de blir truffet prøver å angripe deg
Som du kan se bruk for denne teknikken kan brukes i alt fra industristandard spill til casual spill.
Konklusjon
Takk for at du tar deg tid til å lære dette Quick Tips! Hvis du har noen spørsmål igjen en kommentar nedenfor. Anmeldelser