Propunerea circulară în AS3 efectuați o orbită de obiecte în mișcare

Având o orbită obiect, alta este un mecanic de mișcare care a fost folosit de la începutul erei jocurilor de noroc și rămâne la îndemână până astăzi! În acest sfat rapid vom explora funcția matematică pentru orbitare, vom vedea cum să o modificăm și vom examina utilizările practice în proiectarea reală a jocului.


Rezultatul final al rezultatelor

Iată la ce vom lucra:


Pasul 1: Ecuația orbită

Pentru a crea o orbită trebuie să definim următoarele:

  • Origine - obiectul sau poziția pe care se centrează orbita.
  • Orbiter - Obiectul care orbitează originea.
  • Unghi - Unghiul curent al orbiterului.
  • Speed ​​(Viteză) - Numărul de pixeli pe care obiectul orbitează pe cadru.
  • Radius - Distanța orbiterului de la origine.

De asemenea, este util să rețineți că sistemul de coordonate al Flash este ca un plan cartesian obișnuit, cu excepția faptului că axa y este rotită, astfel încât valoarea crește atunci când ne mișcăm în jos. Colțul din stânga sus al scenei are coordonate (0,0)


În această imagine, 0, 90, 180 și 270 se referă la unghiuri măsurate în grade.

Un alt lucru pe care trebuie să-l înțelegem este cum să convertim gradele la radiani, care pot fi ușor realizate folosind următoarea formulă:

Radii = grade * (PI / 180)

Iată funcția actuală de orbire: necesită două linii, una pentru a poziționa orbiterul pe axa x și cealaltă pentru a o poziționa pe axa y:

Orbiter X-Coord = Origine X-Coord + Radius * cos (Radiani)

Orbiter Y-Coord = Origine Y-Coord + Radius * păcat (Radiani)

(Într-un plan cartezian normal, păcat este folosit pentru x-coord și cos este folosită pentru y-coord, dar deoarece unghiurile noastre cresc în sensul acelor de ceasornic - datorită axei y inversate - locurile lor sunt schimbate.)


Pasul 2: Scrierea ecuației în cod

Acum putem transforma logica într-un cod real pe care îl putem folosi. Mai întâi, declarați toate variabilele:

 public var orbiter: Orbiter = Orbiter nou (); // MovieClip care orbitează public var var: Origin = origine nouă (); // MovieClip care este orbită public angle angle: Number = 0; // Începe orbirea inițială a unghiului de la viteza publică var: Număr = 3; // Numărul de pixeli orbitați pe rază public var radius: Number = 75; // Orbind distanța de la origine

Apoi rescrieți ecuația pentru a fi folosită în AS3 și puneți-o într-un ENTER_FRAME funcția de manipulare a evenimentului:

 var rad: Numărul = unghiul * (Math.PI / 180); // Convertirea gradelor la radii orbiter.x = origin.x + raza * Math.cos (rad); // Poziția Orbiterul pe axa x orbiter.y = origin.y + raza * Math.sin (rad); // Poziția orbiterului Pe axa y

Dacă încercați acum, nimic nu se va întâmpla; acest lucru se datorează faptului că unghiul variabil nu este nici în creștere, nici în scădere. Prin urmare, trebuie să creștem sau să micșorăm valoarea:

 unghiul + = viteza; // Obiectul va orbita în sensul acelor de ceasornic - = viteza; // Obiectul va orbita în sens invers acelor de ceasornic

Acum, dacă dorim ca orbiterul nostru să se confrunte în mod continuu cu o direcție? Ei bine, am scris o ecuație care să facă exact asta!

 orbiter.ro = = (Math.atan2 (orbiter.y-origin.y, orbiter.x-origin.x) * 180 / Math.PI);

În funcție de modul în care ați tras orbitorul dvs. movieclip, va trebui să scăpați un anumit unghi (în afara parantezelor) pentru al face să se confrunte cu calea corectă.


Pasul 3: Transformarea ecuației

Acum, acest lucru poate părea nebun, dar unii dintre noi ar putea dori să aibă obiectul orbită într-o elipsă. Acest lucru este ușor de realizat; tot ce trebuie să facem este să ne multiplicăm într-un anumit loc în ecuație. Înmulțirea cos sau păcat Funcțiile cu un număr întreg pozitiv vor determina întinderea cercului. Înmulțirea cu o zecimală între 0 și 1 va determina compresia. Și înmulțirea cu un negativ va face să se răstoarne pe acea axă:

 (2 * Math.cos (rad)); // Întindeți orbita de-a lungul axei x cu un factor de 2 (0.5 * Math.sin (rad)); // Comprimați orbita de-a lungul axei y cu un factor de 2 (adică jumătate) (-3 * Math.cos (rad)); // Întoarceți orbita de-a lungul axei x și întindeți-o cu un factor de 3

De asemenea, putem schimba orbita în orice direcție dorim prin adăugarea sau scăderea din ecuație pe ambele axe:

 orbiter.x = (origine.x + rază * Math.cos (rad)) - 50; // Schimbați orbita cu 50 de pixeli stânga pe axa x

Dacă doriți să aflați mai multe despre cos, păcat, și ATAN2, aruncați o privire la Trigonometria pentru dezvoltatorii Flash.


Pasul 4: Utilizări practice pentru ecuația

Acum, acest lucru este bine și dandy, dar de ce poate fi de fapt folosit pentru? O mare varietate de lucruri de fapt!

Dacă ai jucat vreodată Mario Kart, ai fi obținut puterea de "trei cochilii"; acele cochilii orbitează folosind această tehnică. Un alt exemplu este jocul de cerc pong foarte utilizat, în cazul în care paleta orbitează de-a lungul unui inel din exterior. Un al treilea exemplu este acela al jocurilor de zombie de sus în jos: multe dintre ele includ un powerup în care o grupare de butoaie orbitează în jurul jucătorului tău și zdrobește orice zombie dacă sunt lovite încercând să te atace.

După cum puteți vedea, utilizarea pentru această tehnică poate fi utilizată în orice, de la jocuri standard din industrie până la jocuri casual.


Concluzie

Vă mulțumim că ați avut timp să învățați acest sfat rapid! Dacă aveți întrebări, lăsați un comentariu mai jos.

Cod