JavaScript : détection efficace des collisions sans jQuery ou gameQuery
La détection des collisions est cruciale dans les jeux et simulations basés sur JavaScript. Bien que jQuery et gameQuery proposent des méthodes pratiques pour cette tâche, les développeurs peuvent rencontrer des situations dans lesquelles ces bibliothèques ne sont pas une option. Dans de tels cas, une solution personnalisée est nécessaire.
Une approche de la détection de collision consiste à créer un tableau de positions d'objets et à tester l'emplacement de chaque objet par rapport à l'objet en mouvement. Cependant, cette méthode est coûteuse en calcul et n'est pas idéale pour les applications en temps réel.
Une approche plus efficace consiste à utiliser une fonction qui calcule le rectangle englobant de chaque objet et vérifie si ces rectangles se chevauchent. Voici une simple routine de rectangle englobant :
<code class="javascript">function isCollide(a, b) { return !( ((a.y + a.height) < (b.y)) || (a.y > (b.y + b.height)) || ((a.x + a.width) < b.x) || (a.x > (b.x + b.width)) ); }</code>
Cette fonction prend deux objets (a et b) avec les propriétés x, y, width et height et renvoie true s'ils entrent en collision ; sinon, il renvoie false.
Pour utiliser cette fonction, comparez simplement les rectangles de délimitation de l'objet en mouvement et de chaque objet potentiellement en collision. Voici un exemple :
<code class="javascript">// Get the current position of the ball var ballX = ball.offsetLeft; var ballY = ball.offsetTop; var ballWidth = ball.offsetWidth; var ballHeight = ball.offsetHeight; // Create an array of someobject positions var someobjectPositions = []; for (var i = 0; i < someobjects.length; i++) { var someobject = someobjects[i]; someobjectPositions.push({ x: someobject.offsetLeft, y: someobject.offsetTop, width: someobject.offsetWidth, height: someobject.offsetHeight }); } // Check for collisions for (var c = 0; c < someobjectPositions.length; c++) { if (isCollide(ball, someobjectPositions[c])) { // Handle the collision } }</code>
En utilisant cette routine efficace de rectangle englobant, vous pouvez implémenter la détection de collision en temps réel en JavaScript sans recourir à des bibliothèques lourdes comme jQuery ou gameQuery.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!