Esta función, entiendo que lo que hace es destruir una instancia de un objeto en unas coordenadas dadas. Pero, si lo que quiero es destruir varias instancias en un area determinada?

Me explico mejor con un ejemplo:

Imaginemos la onda expansiva de una bomba, con un radio de alcance de digamos 200px en redondo, y que todas las instancias que estén dentro de este radio se vieran afectadas.

La pregunta es: La función "position_destroy(x,y)" sirve para este ejemplo que os he puesto?

Muchas gracias a todos

:GM8:

José R. Onís
José R. Onís


#2 Febrero 18, 2014, 03:43:35 AM Ultima modificación: Febrero 18, 2014, 03:49:03 AM por vampy09
position_destroy( x, y )
Cuando esta funcion es llamada destruira a todos los objetos que esten en colision con la mascara ( mask ) del objeto que la invoca.
La mascara de el objeto que la invoca ( ejemplo: obj_granada, obj_bomba ) regula la medida del rango de alcance de la "explosion", no le diria onda expansiva dado que cuando la funcion se invoca se realiza de forma instantanea, osea la "explosion" no crece con cada step.

En si la funcion, destruira las instancias (objetos) que esten colisionando con la instancia que invoca la funcion, dependiendo del tamaño de la mascara de la misma.
Para tu caso, deberias darle un sprite circular con un radio de 100 pixeles, como mask ( debajo de la opcion parent del objeto ) al objeto que usas como explosivo.
Con esto mas la funcion crearas un explosivo con un rango destructivo circular de 200 pixeles.
Espero habero ayudado.
Saludos!
The next best thing to knowing something,
is knowing where to find it.

Entiendo entonces que puedo crear un sprite sin opacidad de un radio de 100px, añadir la máscara de este sprite al objeto que desee, y llamar a la funcion position_destroy(x,y) para que de este modo todo lo que este en el radio de alcance sea destruido o afectado.

Muchas gracias por la aclaración.

Saludos

José R. Onis



José R. Onís

Usar la máscara de colisión es una solución. Otra podría ser verificar qué distancia hay entre la bomba y el enemigo:

if (hay_explosion == true)
{
     With (obj_enemigo_parent)
     {
          if point_distance(x, y, obj_bomba.x, obj_bomba.y) <= obj_bomba.alcance_explosion
               instance_destroy()
     }
}


Si se usa este método conviene tener un objeto padre para todos los enemigos, de lo contrario, hay que poner el código en cada objeto enemigo que tengas en tu juego.

Perfecto, voy a ponerme con ello en un shooter vertical que estoy probando.

Gracias de nuevo

Saludos

José R. Onís
José R. Onís