Diciembre 04, 2017, 02:58:32 PM Ultima modificación: Diciembre 04, 2017, 06:24:20 PM por matiascarpello
Hola gente. Tengo una duda y quiero saber como sería posible hacer lo siguiente.

Quiero que en el evento create se compruebe una sola vez si el objeto bloque colisiona con el objeto enemigo.

Si el objeto bloque colisiona con el enemigo entonces que solo el enemigo con el que colisiona el bloque se destruya. No todas las instancias enemigos. Solo con el que coliciona.

Para eso yo trato de aplicar en el evento create del objeto bloque un place_meeting(x,y,obj_enemigo).

El problema es que no se como hacer para que elimine solo al enemigo que está colisionando con el bloque. Con el evento collision es fácil, le agrego destroy y marco la casilla other, pero yo necesito que esté en el evento create para poder optimizar mi código, ya que el evento collition hace una comprobación permanente.

Usando collision_rectangle, esta funcion regres la id de la otra instancia
[gml]
with(collision_rectangle()) {instance_destroy()}
[/gml]
La ayuda muestra un ejemplo.

Qué raron, estoy aplicando el siguiente código en un evento create pero no me funciona


var inst;
inst = collision_rectangle(50, 50, 200, 100, obj_enemigo, false, true);
if inst != noone
   {
   with (inst) instance_destroy();
   }


Ya corroboré dibujando un rectángulo para ver si estaban bien esas coordenadas que puse en el evento create y en teoría tendría que destruir al objeto enemigo pero no lo hace.

Depura la variable inst. Imprime con en consola un show_debug_message() el valor de esta variable a ver si obtiene alguna id, porque tu código está bien; la única razón por la que pueda no funcionar es porque no se encuentre ninguna instancia en el rectángulo.
alaberga regué el café.

BA:STFW&RTFM

Gracias NiuWeb.

Efectivamente el código estaba bien, el problema era que el objeto enemigo se estaba creando después de el objeto bloque que tiene justamente el código para eliminarlo. Lo solucioné introduciendo el código en un alar[0]=1. Total es como el evento create, se ejecuta una sola vez y listo.