Sirkulær bevegelse i AS3: Gjør One Moving Object Orbit Another

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



Previous:
Next Page: