Înțelegerea comportamentelor de direcție Căutați

Metodele de conducere urmăresc să ajute personajele autonome să se miște într-o manieră realistă, folosind forțe simple care sunt combinate pentru a produce navigație improvizată în jurul valorii de mediu a personajelor. În acest tutorial voi acoperi teoria de bază din spatele căuta comportamentul de conducere, precum și implementarea acestuia.

Ideile din spatele acestor comportamente au fost propuse de Craig W. Reynolds; ele nu se bazează pe strategii complexe care implică planificarea traseului sau calculele globale, ci folosesc informații locale, cum ar fi forțele vecinilor. Acest lucru le face să fie ușor de înțeles și implementat, dar încă capabili să producă modele de mișcare foarte complexe.

Notă: Deși acest tutorial este scris folosind AS3 și Flash, ar trebui să puteți utiliza aceleași tehnici și concepte în aproape orice mediu de dezvoltare a jocului. Trebuie să aveți o înțelegere de bază a vectorilor de matematică.


Poziție, viteză și mișcare

Implementarea tuturor forțelor implicate în comportamentele de direcție poate fi realizată folosind vectori de matematică. Deoarece aceste forțe vor influența viteza și poziția personajului, este o abordare bună de a folosi vectori pentru a le reprezenta și ei.

Chiar dacă un vector are a direcţie, va fi ignorată atunci când este legată de poziție (să presupunem că vectorul de poziție indică locația curentă a personajului).

Figura de mai sus reprezintă un caracter poziționat la (X y) cu o viteză (a, b). Mișcarea este calculată utilizând integrarea Euler:

poziția = poziția + viteza

Direcția vectorului de viteză va controla unde se îndreaptă caracterul, în timp ce lungimea (sau magnitudinea) va controla cât va deplasa fiecare cadru. Cu cât lungimea este mai mare, cu atât mai repede se mișcă caracterul. Vectorul de viteză poate fi trunchiat pentru a se asigura că nu va fi mai mare decât o anumită valoare, de obicei viteza maximă. Mai jos este un test care arată această abordare.


Deplasați mouse-ul pentru a muta ținta.

Pătratul roșu se mișcă spre o țintă (cursorul mouse-ului). Acest model de mișcare ilustrează căuta comportament fără forțele de direcție aplicate până în prezent. Linia verde reprezintă vectorul de viteză, calculat după cum urmează:

viteza = normalizare (țintă - poziție) * max_velocity

Este important de remarcat că, fără forța de direcție, personajul descrie rutele drepte și își schimbă instantaneu direcția când țintă se mișcă, făcând astfel o tranziție bruscă între ruta actuală și cea nouă.


Forțele de calcul

Dacă ar exista doar forța de viteză, caracterul ar urma o linie dreaptă definită de direcția acelui vector. Una dintre ideile comportamentelor de direcție este aceea de a influența mișcarea personajului prin adăugarea de forțe (numite forțele de direcție). În funcție de aceste forțe, caracterul se va deplasa într-o direcție sau într-o altă direcție.

Pentru comportamentul căutării, adăugarea forțelor de direcție la caracterul fiecărui cadru îi ajută să regleze rapid viteza sa, evitând schimbările bruște ale traseului. Dacă țintă se mișcă, caracterul va fi treptat schimba vectorul de viteză, încercând să ajungă la țintă la noua sa locație.

Comportamentul căutării implică două forțe: viteza dorită și direcție:

viteza dorită este o forță care îndrumă caracterul spre țintă folosind calea cea mai scurtă posibilă (linia dreaptă între ele - anterior, aceasta a fost singura forță care acționa asupra personajului). direcție forța este rezultatul vitezei dorite scăzută de viteza curentă și împinge caracterul spre țintă. 

Aceste forțe se calculează după cum urmează:

desired_velocity = normaliza (ținta - poziția) * direcția max_velocity = dorită_velocitate - viteza

Adăugarea forțelor

După ce a fost calculată forța de direcție, ea trebuie adăugată la caracter (va fi adăugată forței de viteză). Adăugarea forței de direcție la viteza fiecărui cadru va face ca personajul să abandoneze liniștit calea dreaptă veche și să se îndrepte spre țintă, descriind caută cale (curba portocalie în figura de mai jos):

Adăugarea acestor forțe și calculul final al vitezei / poziției sunt:

direcție = trunchi (direcție, max_force) direcție = direcție / viteză masă = trunchiat (viteză + direcție, max_speed) poziție = poziție + viteză

Forța de direcție este trunchiată pentru a se asigura că nu va depăși cantitatea de forțe admise pe care personajul o poate manevra. De asemenea, forța de direcție este împărțită de masa de caractere, care produce diferite viteze de mișcare pentru diferite caractere ponderate. Mai jos este un test care arată comportamentul căutării cu toate forțele aplicate:


Deplasați mouse-ul pentru a muta ținta.

De fiecare dată când țintă se mișcă, fiecare personaj este viteza dorită vectorul se modifică în consecință. viteză vector, însă, durează ceva timp pentru a schimba și a începe să îndrepte din nou spre țintă. Rezultatul este o tranziție fără mișcare.


Concluzie

Condițiile de conducere sunt excelente pentru crearea de modele de mișcare realiste. Ideea principală este utilizarea informațiilor locale pentru a calcula și aplica forțele pentru a crea comportamentele. Chiar dacă calculul este simplu de implementat, acesta este în continuare capabil să producă rezultate foarte complexe.

Acest tutorial a descris elementele de bază ale comportamentelor de direcție, explicând comportamentul căutării. În următoarele câteva postări, vom afla despre mai multe comportamente. Consultați următorul mesaj: Flee și Sosire.