Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: jronis en Febrero 17, 2014, 10:44:15 PM

Título: position_destroy(x,y)
Publicado por: jronis en Febrero 17, 2014, 10:44:15 PM
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
Título: Re:position_destroy(x,y)
Publicado por: eams1986 en Febrero 18, 2014, 12:21:43 AM
Parece que es distance_position
Título: Re:position_destroy(x,y)
Publicado por: vampy09 en Febrero 18, 2014, 03:43:35 AM
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!
Título: Re:position_destroy(x,y)
Publicado por: jronis en Febrero 18, 2014, 07:52:53 PM
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



Título: Re:position_destroy(x,y)
Publicado por: penumbra en Febrero 18, 2014, 08:05:51 PM
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.
Título: Re:position_destroy(x,y)
Publicado por: jronis en Febrero 18, 2014, 10:45:39 PM
Perfecto, voy a ponerme con ello en un shooter vertical que estoy probando.

Gracias de nuevo

Saludos

José R. Onís