Sfat rapid mutați ușor o entitate la poziția mouse-ului

Iată un fragment simplu de cod care vine la îndemână tot timpul: cum să mutați un obiect dintr-un punct în altul, într-o mișcare netedă și continuă. Vom folosi distanța pitagoreană și puțină ușurare pentru a opri lucrurile.


Notă: Deși acest tutorial este scris folosind JavaScript, ar trebui să puteți utiliza aceleași tehnici și concepte în aproape orice mediu de dezvoltare a jocului.


1. Explicație

În unele jocuri, poate doriți să mutați un personaj în poziția mouse-ului. Uneori veți dori să faceți acest lucru atunci când jucătorul face clic, de altă dată, veți dori ca personajul să se deplaseze în mod constant spre poziția mouse-ului și să se odihnească odată ce atinge aceeași poziție cu mouse-ul. Vom face acest lucru în acest tutorial, dar ajustarea acestui lucru pentru a lucra cu click-urile mouse-ului va fi banală.


2. Formula de distanta

Pentru a muta entitatea în poziția mouse-ului, trebuie mai întâi să aflăm cât de departe este entitatea de la mouse.

Pentru a face acest lucru vom folosi formula de distanta. Aceasta utilizează teorema lui Pythagoras și se calculează după cum urmează, pentru coordonate (x1, y1) și (x2, y2):

\ (d) \ \ sqrt (\ Delta x) ^ 2 + (\ Delta y) ^ 2 = \ sqrt (x_2-x_1) ^ 2 +

Cu alte cuvinte, ați pătrat diferența dintre coordonatele x, ați pătrat diferența dintre coordonatele y, adăugați cele două pătrate împreună și luați rădăcina pătrată a sumei.

Pentru a înțelege cum funcționează, am creat următoarea imagine.


Exemplu de formula de distanta

În imaginea de mai sus distanța x este 7 și y-distanța este 6. Lucrând prin pași ajungem la o distanță de aproximativ 9.21.

\ [D = \ sqrt (x_2-x_1) ^ 2 + (y_2-y_1) ^ 2 \\
d = \ sqrt (10-3) ^ 2 + (3-9) ^ 2 \\
d = \ sqrt (7) ^ 2 + (- 6) ^ 2 \\
d = \ sqrt 49 + 36 \\
d = \ sqrt 85 \\
d \ approx9.21 \]


2. Implementarea codului

Pentru a implementa acest lucru în cod, vom lua coordonatele x și y ale cursorului mouse-ului și al entității noastre (care în acest caz este o navă spațială). Apoi, vom aplica formula de distanță și vom mări sau micșora entitatea entității X și y poziții, atâta timp cât distanța este mai mare de 1.

Mai jos este un cod pentru a ilustra acest lucru:

funcția gameLoop () var xDistance = mouseX - ship.x; var yDistance = mouseYY - ship.y; var distanța = Math.sqrt (xDistance * xDistance + yDistance * yDistance); dacă (distanța> 1) ship.x + = xDistance * easingAmount; nava.y + = yDistance * easingAmount; 

Am codificat un demo care arată toate acestea în acțiune:



3. Ce este relaxarea?

S-ar putea să fi observat că în pasul de mai sus am înmulțit xDistance și yDistance de un easingAmount.

Acest lucru face ca entitatea noastră să încetinească în timp ce se apropie de țintă, mai degrabă decât să se deplaseze la aceeași distanță pe fiecare bifă a jocului. Acest lucru este cunoscut sub numele de relaxare.

Încercați să ajustați valoarea easingAmount în fișierul jsFiddle al demo-ului de mai sus și vedeți ce efect are. De asemenea, puteți experimenta codul din interiorul lui tick () funcţie.


4. Jocul Demo

Am codificat o demonstrație foarte simplă pentru a vă arăta cum ar putea fi aplicată aceasta într-un joc real. Experimentați codul și vedeți ce puteți face!


(Grafica de la Everaldo Coelho, Sneh Roy și Jacob Zinman-Jeanes.)


Concluzie

În acest scurt Quick Tip, ați învățat cum să mutați o entitate în poziția mouse-ului. Vedeți dacă puteți ajusta codul astfel încât entitatea să se mute în ultima poziție în care a făcut clic pe player, mai degrabă decât să urmărească continuu mouse-ul. Sper că ați găsit acest lucru util - mulțumesc pentru citire!