Détection de collision Javascript

J'essaie de faire un jeu de serpent en javascript, mais je suis en difficulté avec la détection de collision. J'ai essayé plusieurs méthodes jusqu'à présent, mais dans le désespoir, je me suis arrangé pour stocker toutes les positions des segments de chaque image puis vérifier s'il y avait des doublons avant d'animer le prochain. Cette méthode n'a pas été couronnée de succès, soit malheureusement.

Peut-être cela est-il dû à un malentendu de la façon dont JS traite les tableaux. Pendant un certain temps, j'utilisais if(x in y) mais à partir de ce que je peux dire qui revient si le même objet est dans un tableau.

Voici la démo en direct: http://jsfiddle.net/AScYw/2/

Voici le code plus facilement lu: http://pastebin.com/ygj73me6

Le code en question se trouve dans l'objet serpent, car la fonction se collide .

 this.collide = function(){ for(var z=0; z<this.positions.length-1; z++){ for(var q=z+1; q<this.positions.length-1; q++){ return this.positions[z][0] == this.positions[q][0] && this.positions[z][1] == this.positions[q][1]; } } 

Votre fonction ici nécessite un peu de travail et cela peut résoudre votre problème.

 this.collide = function(){ for(var z=0; z<this.positions.length-1; z++){ for(var q=z+1; q<this.positions.length-1; q++){ return this.positions[z][0] == this.positions[q][0] && this.positions[z][1] == this.positions[q][1]; } } } 

2 choses sont fausses.

  1. Vous sortez de la boucle la première comparaison. Vous voudrez faire quelque chose comme si (quelque chose se chevauche) renvoie true puis à l'extérieur des deux boucles renvoie false si vous réussissez avec succès
  2. Vous voudrez vous assurer que le segment z! = Q segment ou vous aurez toujours une collision

Ça a l'air cool. Voir ensuite Mario;)