Colisiones Introduccin Algo que vemos mucho en bastantes
Colisiones.
Introducción • Algo que vemos mucho en bastantes videojuegos, y que por el momento no se ha visto “bien”, son las colisiones, pero, para empezar; ¿Qué es una colisión? • Si lo analizamos bien, podríamos notar que es el contacto entre 2 o más instancias, generalmente provocando una reacción. (Ejemplo: Al chocar con la pared, no podemos avanzar, o al chocar con un enemigo, perdemos parte de la salud. )
• Game. Maker posee ciertas funciones y variables que nos permiten saber cuándo chocan 2 o más objetos. • Las más sencillas de utilizar son: • place_empty • place_free • place_meeting • position_empty • position_meeting • position_change • position_destroy • Y aunque pueden entenderse de manera casi intuitiva, explicaremos qué hace y cómo funciona cada una de ellas.
• Pero antes, hay que recordar ciertos conceptos importantes de empezar. En la primera unidad, aunque de forma breve, se vieron las máscaras de colisión, que son básicamente el área del sprite con la cual se puede colisionar. Un ejemplo, es como quedaría aquí:
• Como vemos, la máscara aquí tiene forma rectangular, y con un área que va de izquierda a derecha, y desde el pixel 8, hasta el 33. Después, de arriba abajo inicia desde el pixel 0 y termina en el 47, lo que es todo el sprite. Pero, ¿Por qué es importante utilizar máscaras de colisión? Bueno, en sí, un sprite es tan sólo una imagen, y si no se le diera una máscara de colisión, todas las demás instancias en el juego pasarían por encima, o por debajo del objeto que tenga este sprite, comportándose como si el objeto no existiera, ya que lo que hace Game. Maker es tomar esta área como la parte “sólida” del objeto.
• place_empty(x, y); Recibe los argumentos: x, y Regresa valor booleano. Esta función, revisa si se da una colisión entre el objeto con que es llamado la función, y algún otro que esté en las coordenadas dadas, y si no es así, entonces regresa un valor true. Es decir, si hay un lugar vacío en las coordenadas dadas, se regresa un valor true. • Un ejemplo podría ser: • if( place_empty(x+5, y) ){ • x+=5; • • } Este código lo que hace es revisar, si se da una colisión en las coordenadas x+5, y y si es así, se mueve 5 pixeles en x. Nota: Las coordenadas como: x+5, y-5, x*6, y / 8 Se refieren a la posición actual en x o y, afectada por la operación que le sigue. Por ejemplo, si la posición en x tiene un valor de 30, entonces: x+5 representa a un valor de 35. Esto es algo que aplica a cualquier variable, no sólo a las coordenadas X y Y.
• place_free(x, y); Recibe: x, y Devuelve: booleano. Funciona de una manera bastante parecida a place_empty, revisando si hay un lugar vacío en la posición x, y. Con la única diferencia de que, place_free(), aplica sólo a objetos con la casilla solid marcada. Es decir, regresa true, si el lugar por el que preguntamos está libre de un objeto con la casilla solid activada. • place_meeting(x, y, obj); Recibe: Coordenadas en x, y. Nombre de objeto. Devuelve: Booleano. Tal como las anteriores, revisa si no hay una colisión en la posición dada. Pero, en este caso, la colisión sólo se cumple con el objeto que le enviemos. (ej. Si quisiéramos que revise la colisión, pero sólo con el objeto árbol. )
• position_empty(x, y); y position_meeting(x, y, obj); Reciben: Coordenadas en x, y. Nombre de objeto. Devuelven: Booleano. En analogía a place_empty() y place_meeting(); Estas dos nuevas funciones hacen exactamente lo mismo, con la diferencia de que revisan sólo un punto, que es el que le damos con las coordenadas x, y. • position_change(x, y, obj, perf); Recibe: x y Obj perf Coordenada en x del lugar a revisar. Coordenada en y del lugar a revisar. Nombre del nuevo objeto. Valor booleano, de si se ejecutará el Create del nuevo objeto (true) o no (false). Regresa: N/A Esta función, revisará si en la posición x, y existe una instancia cualquiera, y si la hay, cambiará esta instancia por una nueva de un objeto cualquiera (El que enviemos).
• position_destroy(x, y); Recibe: x, y Regresa: N/A • Esta función destruye las instancias que se encuentran en la posición x, y. • Hasta ahora, esas son todas las funciones que necesitamos conocer para simular unas colisiones buenas y simples, pero en sí, ¿cómo hacemos una colisión? • Una de las maneras más simples es con un condicional, y podríamos definirlo así: • if(place_meeting(x, y, obj)){ • x = 0; }
- Slides: 9