Vedere fizică a motorului din interior

Vedere fizică a motorului din interior

În acest articol ne vom uita la utilizarea fizicii pentru a simula aruncarea de scoici (da, la fel ca în Angry Birds). Vom acorda o atenție la elementele de bază ale utilizării fizicii 2D, precum și la crearea de corpuri fizice, impulsuri și forțe. Nu uitați să menționați cele mai populare motoare de joc pentru simularea lumilor fizice 2D.

Funcțiile motorului fizic

De ce ar trebui să folosim un motor fizic? Și ce este cu adevărat?
B
În general, motorul fizic este foarte util. El ne permite să facem două lucruri importante pentru noi:

  • Detectarea coliziunilor (coliziunilor) dintre obiectele noastre de joc;
  • Simularea forței și mișcărilor ca urmare a coliziunilor.

Detectarea coliziunilor

Jocurile nu ar fi foarte interesante dacă personajul tău a căzut pe podea fără să facă un singur pas sau să sară. Sau dacă piciorul personajului tău ar fi trecut prin dușmanul pe care ai vrut să-l dai. Detectarea coliziunilor face posibilă determinarea foarte precisă a interacțiunii a două corpuri.

Simularea puterii

Ce ar trebui să se întâmple după coliziune? Pot apărea diverse fenomene: un personaj poate sări, un alt obiect de joc poate sări, sau poate că te deplasezi într-o anumită direcție. Toate acestea se fac de motorul din spatele scenei. Dar forțele pe care un motor fizic le poate imita nu se limitează la coliziuni. Există concepte precum gravitatea și impulsul. Ele pot fi aplicate organismelor, chiar dacă nu s-au ciocnit. De asemenea, astfel de forțe pot influența acțiunile care apar în joc, mișcările eroilor și chiar lumea în sine.

Vedere fizică a motorului din interior

Deci, haideți să aruncăm o privire scurtă asupra dispozitivului fizic, dar mai întâi vom acorda atenție soiurilor lor și vom determina alegerea pe baza nevoilor noastre.

Alegerea motorului fizic

În acest stadiu, aveți două opțiuni. Ambele opțiuni au avantaje și dezavantaje:

  1. Utilizați motorul fizic existent;
  2. Scrieți propria implementare (cu preferințe și curtezani).

Utilizarea unui motor existent

Există câteva opțiuni gata făcute. Unul dintre cele mai populare motoare pentru jocuri 2D este, desigur, Box2D. Acesta a fost inițial scris în C ++, dar a fost portat la aproape toate limbile de programare populare. Un alt motor bine cunoscut este Chipmink 2D. care este folosit ca principal în astfel de cadre ca Cocos2D.

Scrierea motorului

În unele jocuri, folosirea unei soluții existente este un lux inutil. Faptul este că motorul fizic folosește o mulțime de memorie prețioasă, iar în jocuri nemaipomenite poate provoca o sarcină inutilă, care ar putea fi evitată. Sunt de acord, în platforme simple sau arkanoidov, nu este nevoie să calculam locul de contact cu precizia unui pixel. Resursele pe care trebuie să le cheltuim pentru a calcula o astfel de coliziune, putem cheltui într-un alt loc, unde ar fi mai potrivit.

Da, crearea propriului motor de fizică vă va oferi mai multă flexibilitate decât un produs deja finit. Cu toate acestea, nu uitați că acest proces este destul de scrupulos și, la urma urmei, puteți implementa ceva într-un mod mai complicat decât într-un motor gata pregătit.

Înainte de a analiza proprietățile fizice și de modelare detalii, să ne uităm la ceea ce se întâmplă în fiecare cadru de joc la abordarea „cap“:

Vedere fizică a motorului din interior

Un ciclu tipic de joc pentru fiecare cadru va trece prin patru etape în următoarea ordine:

Rețineți că cadrul este randat după simularea fizică. Această ordine, desigur, nu este lipsită de sens.

Rata fixă ​​a cadrelor față de variabilă

Să vorbim despre rata de cadre: rata fixă ​​și rata dependentă de cadru. Metoda de actualizare se numește o dată pe cadranul scenei jocului. Dacă metoda dvs. de simulare fizică este chemată din metoda de actualizare, atunci lumea fizică va depinde de rata cadrelor. Acest lucru poate duce la comportamentul nerealist al corpurilor fizice. În iOS, acest efect este rezolvat utilizând proprietatea booleană usesPreciseCollisionDetection. Dar cum rămâne cu celelalte sisteme de operare?

Luați în considerare fragmentul de cod:

Acest cod este destinat să compenseze problemele cu valoarea timpului delta. De fapt, va fi în cazul în care în timpul jocului ați sunat. Apoi puteți folosi acest algoritm pentru a restabili valoarea timpului delta (pentru joc cu 60 FPS).

Acesta este de fapt primul pas în conceptul de motor fizic. Da, codul precedent va face simularea mai stabilă, dar nu va rezolva toate problemele. Pentru a face acest lucru, trebuie să eliminăm apelul pentru funcția de simulare a fizicii din ciclul de redare a scenei jocului și apoi să creăm un ciclu fix. În acest ciclu, simularea fizică va funcționa. De exemplu, dacă jocul dvs. este proiectat să funcționeze la 60 de cadre pe secundă, atunci setați frecvența de simulare a fizicii la 60 de ori pe secundă. Această împărțire a responsabilităților ne va permite să eliminăm multe probleme.

Rezumând, vreau să spun că, odată ce ați decis să scrie un motor de fizica - să fie conștiincios și fă-dreapta. Aceasta conchide prima parte a articolului nostru. În următoarea parte, vom vorbi despre corpurile fizice și proprietățile lor și vom menționa, de asemenea, limitările tipice ale motoarelor fizice.

Articole similare