Hola a todos, antes que nada aclaro que una de las pocas cosas que nunca usé de GM hasta ahora es el sistema de partículas por lo que no tengo ni idea de como funciona. Lo que quería hacer y todavía no encontré la forma es que cuando un objeto colisiona con otro haga un efecto como de chispas o fuego y de poder hacerse que sea del mismo color que el sprite, ¿alguien sabe como hacerlo? desde ya muchas gracias amigos, saludos.
Saludos!
Primero que nada antes de poder usar un sistema de partículas necesitas 3 cosas:
La partícula en cuestión.
El sistema.
El emisor dentro del sistema que genera la antes mencionada partícula.
Sin embargo existe una forma mas sencilla, que paso a explicarte a continuación.
Bien, primero antes que nada hay que crear la particula que vamos a usar:
Para ello tenemos la funcion part_type_create();
esta función devuelve un indice o ID o nombre que va a usarse en las demás funciones para agregarle propiedades.
En algun evento create colocamos:
PARTICULA = part_type_create(); //Con esto creamos una particula
Luego existen varias funciones para ir dandole propiedades a esta, como ser alpha (transparencia), color, direccion, movimiento, velocidad, tiempo de vida, forma, forma de sprite, etc...
En este caso vamos a asignarle una forma, color y un alpha para darle algo de vida. Entonces haríamos:
PARTICULA= part_type_create();
part_type_shape(PARTICULA, pt_shape_ring); //Aqui decimos que nuestra particula tenga forma de anillo
part_type_alpha2(PARTICULA, 1, 0); //Acá decimos que nuestra particula va a ir desapareciendo en el transcurso de su vida
part_type_life(PARTICULA,0,100); // Aqui decimos que tengra una vida de 100 steps
part_type_colour1(PARTICULA, c_orange); //El color para nuestra particula sera anaranjado
Luego, lo siguiente sería crear un sistema que contendría la partícula para poder utilizarla, solo bastaría con:
SISTEMA= part_system_create(); //Creamos un sistema para poder producir una particula
Ahora para crear la partícula usaremos una funcion sencilla (que puede ir en cualquier evento) :
part_particles_create(SISTEMA, mouse_x, mouse_y, PARTICULA, 1);
La cual nos dice que (leyendo de derecha a izq.) cree 1 particula del tipo PARTICULA en las coordenadas y, x, del ratón dentro del sistema SISTEMA.
Eso bastaría para poder crear una partícula facilmente.
Hola Black, bueno antes que nada te agradezco mucho por tan completa información, me llevo el tutorial en un txt porque seguro lo voy a usar muchas veces! lo que me quedaría preguntar es si sabes o alguien sabe como almacenar una colision para que se produzcan las partículas ahí, es decir, ni en un objeto ni en otro, en la colisión misma, me pasé horas y aún no logro hacerlo.
Ah y lo último que veo que la tenés re clara con las partículas, como sería para poner sprites? por ejemplo no sé, estrellas o algo así, saludoss!!
Bueno, para hacer que sea un sprite, cambias la parte de la definición , en vez de usar "part_type_shape(...)" usas "part_type_sprite(...)"
part_type_sprite(PARTICULA, sprite0, true, true, false);
Con esta funcion decimos que PARTICULA va a tener como imagen a "sprite0", luego le decimos que queremos que el sprite sea animado con el true. Luego colocamos "true" y decimos que queremos alargar la duración de la animación hasta que muera la partícula.(En otro caso, se repetiría la animación varias veces antes de morir). Y finalmente usamos "false" para indicar que queremos que la animación comience desde la subimagen 0, en otro caso tomaría una subimagen al azar.
-La verdad no sabría decirte cómo hacer para obtener el punto exacto de la colisión, sin embargo podés evaluar si se hizo por arriba,debajo, por la izquierda o por la derecha del objeto que es más sencillo. Después solo bastaría con crear la particula en la mitad correspondiente.
Saludos!
Gracias genio! un abrazo, ya pongo el tema como resuelto, quedó todo clarísimo.
Algo que me olvidé de mencionar, y recordé al intentar solucionar un problema de otro usuario aquí, es:
Siempre que crees una partícula y un sistema debes destruirlos al finalizar el juego, con las funciones correspondientes:
part_type_destroy(PARTICULA);
part_system_destroy(SISTEMA);
Porque cada ejecución del juego estaría creando una nueva particula y un sistema que se cargarían en memoria. Valga la redundancia, cada ejecución del juego. Entonces probablemente se llene la memoria ram de tanto abrir y cerrar el juego al testearlo.
Aclaro que aún así si no estuvieras testeando se deben eliminar sino quedan cargadas en la memoria ram.