2011-08-13 25 views
6

Estoy tratando de hacer un juego de serpientes en JavaScript, pero estoy luchando con la detección de colisiones. He intentado varios métodos hasta ahora, pero en la desesperación, he decidido almacenar todas las posiciones de los segmentos en cada fotograma y luego verificar si hay algún duplicado antes de animar el siguiente. Este método tampoco ha sido exitoso.Javascript Detección de colisiones

Quizás esto se deba a un malentendido acerca de cómo JS trata las matrices. Durante un tiempo estuve usando if(x in y) pero por lo que puedo decir que regresa si el mismo objeto está en una matriz.

Aquí está la demostración en vivo: http://jsfiddle.net/AScYw/2/

Aquí está el código sea más fácil de leer: http://pastebin.com/ygj73me6

El código en cuestión está en el objeto de serpiente, como la función 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]; 
       } 
      } 
+1

¡Este juego es fácil con la detección de colisiones deshabilitada! – bgw

+0

@PiPeep Sí, ¿no es genial? – danem

Respuesta

5

Funciona aquí necesita un poco de trabajo y puede solucionar su problema.

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 cosas están mal.

  1. Usted está abandonando el ciclo la primera comparación. Deberá hacer algo como si (algo se superpone) devolver verdadero luego fuera de ambos bucles devolver falso si lo hace con éxito
  2. Querrá asegurarse de que el segmento z! = Q segmento o siempre tendrá una colisión

Looks cool. Veamos a Mario siguiente;)

+0

No estoy seguro si entiendo bien tu primer punto, ¿qué quieres decir con que estoy abandonando el ciclo? ¿Y no iniciar q en 'z + 1' asegura que no serán los mismos? ¡Gracias por la ayuda! No estoy seguro de si estoy cerca de remakear Mario. D: Tal vez tetris primero. – danem

+0

Se llama a su declaración de devolución por primera vez a través del bucle, por lo que solo termina verificando un segmento. – thedaian

+0

@thedaian ¿quiere decir que sale del bucle independientemente de que sea cierto? Cambié el código para que se llame a la devolución después de que pase una condición, pero ahora siempre se devuelve verdadero. – danem

Cuestiones relacionadas