Pues Tengo efectos como la nieve, la lluvia y los fuego artificiales aplicando, por ejemplo para hacer la nieve aplico este codigo:
obj_Particula_Nieve
CREATE
///Sistema de particula
//Creamos el sistema de particulas
nieve = part_system_create();
part_system_depth(nieve, 50); //Produndidad
//Creamos un nuevo tipo de particulas
particula_nieve = part_type_create();
part_type_shape(particula_nieve,pt_shape_snow); //La forma de la particula
part_type_orientation(particula_nieve,0,0,0,0,1); //La rotacion aleatoria de la particula
part_type_size(particula_nieve,0.05,0.25,0,0); //Tamaño aleatorio de la particula
part_type_speed(particula_nieve,1,1.5,0.05,0); //Velocidad de la particula
part_type_direction(particula_nieve,270,270,0,4); //Direccion de la particula
part_type_life(particula_nieve,180,210); //Duracion de la particula
//Creamos en el emisor
nieve_emisor = part_emitter_create(nieve);
//Establecer region de la habitacion donde se creara el emisor, el perfil y la forma de distribucion
part_emitter_region(nieve,nieve_emisor,0-100,room_width+100,-10,-5,ps_shape_ellipse,ps_distr_linear);
//Empezamos a emitir particulas cada 0.20 segundos
part_emitter_stream(nieve,nieve_emisor,particula_nieve,-5);
¿Pero saben como hacer corazones?
La razón de esto es que aplicare eventos del año ami juego a modo de secreto, el nivel navidad tendría este código, ya que es normal asimilar la nieve con navidad, aunque en mi país hay mas calor que frió en esa época, por otro lado los corazones serian por un evento de "San valentin", y claro encontrar corazones en esa fecha es como encontrar gente disfrazada de "Viejo pascuero" o como sea que le llamen en su país.
https://docs.yoyogames.com/source/dadiospice/002_reference/particles/particle%20types/part_type_sprite.html
Cita de: NiuWeb en Octubre 12, 2017, 12:08:56 AM
https://docs.yoyogames.com/source/dadiospice/002_reference/particles/particle%20types/part_type_sprite.html
¿Y según tu como aplicaría esto en las partículas? tendría que crear un sprite con la forma "corazon" para que se vea, ya que no se puede crear por código?
Exacto.
(No es que no se pueda, es que es innecesariamente complejo —además dibujar un sprite gasta mucho menos procesamiento que un montón de puntos en forma de corazón—).
Cita de: NiuWeb en Octubre 12, 2017, 12:58:18 AM
Exacto.
(No es que no se pueda, es que es innecesariamente complejo —además dibujar un sprite gasta mucho menos procesamiento que un montón de puntos en forma de corazón—).
¿Y como debería encajar ese tal part_type_sprite en el código? algo que me queda claro es que tendría que eliminar esa función part_type_shape, ya que debería reemplazarlo, o al menos es lo que puedo intuir.
En el manual hay un ejemplo, ¿no?
Cita de: ¡Vaya! Parece que el manual sí trae un ejemploExample:
[gml]
global.p1 = part_type_create();
part_type_sprite(global.p1 , spr_Coins, 1, 0, 0);
part_type_size(global.p1, 1, 3, 0, 0);
part_type_scale(global.p1, 1, 1);
part_type_colour1(global.p1, c_white);
part_type_alpha2(global.p1, 1, 0);
part_type_speed(global.p1, 2, 4, 0, 0);
part_type_direction(global.p1, 0, 180, 0, 0);
part_type_gravity(global.p1, 0.20, 270);
part_type_orientation(global.p1, 0, 0, 0, 0, 1);
part_type_blend(global.p1, 1);
part_type_life(global.p1, 15, 60);
[/gml]
The above code sets the particle type indexed in the global variable "p1" to the shape of the sprite indexed in "spr_Coins", and then sets various other particle properties.
Cita de: NiuWeb en Octubre 12, 2017, 02:19:01 AM
En el manual hay un ejemplo, ¿no?
Cita de: ¡Vaya! Parece que el manual sí trae un ejemploExample:
[gml]
global.p1 = part_type_create();
part_type_sprite(global.p1 , spr_Coins, 1, 0, 0);
part_type_size(global.p1, 1, 3, 0, 0);
part_type_scale(global.p1, 1, 1);
part_type_colour1(global.p1, c_white);
part_type_alpha2(global.p1, 1, 0);
part_type_speed(global.p1, 2, 4, 0, 0);
part_type_direction(global.p1, 0, 180, 0, 0);
part_type_gravity(global.p1, 0.20, 270);
part_type_orientation(global.p1, 0, 0, 0, 0, 1);
part_type_blend(global.p1, 1);
part_type_life(global.p1, 15, 60);
[/gml]
The above code sets the particle type indexed in the global variable "p1" to the shape of the sprite indexed in "spr_Coins", and then sets various other particle properties.
No crea nada, y para crea una imagen se le debe dar un sprite al objeto, ademas que la imagen se queda estancada en la misma posición donde fue creado el objeto.
Eso significa que algo estás haciendo mal, ¿no crees? Muestra el código que escribiste.
(Y no, no se necesita darle un sprite al objeto que crea la partícula).
Cita de: NiuWeb en Octubre 12, 2017, 05:40:07 PM
Eso significa que algo estás haciendo mal, ¿no crees? Muestra el código que escribiste.
(Y no, no se necesita darle un sprite al objeto que crea la partícula).
///Sistema de particula
global.p1 = part_type_create();
part_type_sprite(global.p1 , spr_Corazon, 1, 0, 0);
part_type_size(global.p1, 1, 3, 0, 0);
part_type_scale(global.p1, 1, 1);
part_type_colour1(global.p1, c_white);
part_type_alpha2(global.p1, 1, 0);
part_type_speed(global.p1, 2, 4, 0, 0);
part_type_direction(global.p1, 0, 180, 0, 0);
part_type_gravity(global.p1, 0.20, 270);
part_type_orientation(global.p1, 0, 0, 0, 0, 1);
part_type_blend(global.p1, 1);
part_type_life(global.p1, 15, 60);
//Viejo código comentado
/*
//Creamos el sistema de particulas
nieve = part_system_create();
part_system_depth(nieve, 50); //Produndidad
//Creamos un nuevo tipo de particulas
particula_nieve = part_type_create();
part_type_shape(particula_nieve,pt_shape_snow); //La forma de la particula
part_type_color1(particula_nieve,55295); //El color de la particula
part_type_orientation(particula_nieve,0,0,0,0,1); //La rotacion aleatoria de la particula
part_type_size(particula_nieve,0.05,0.25,0,0); //Tamaño aleatorio de la particula
part_type_speed(particula_nieve,1,1.5,0.05,0); //Velocidad de la particula
part_type_direction(particula_nieve,180,180,0,4); //Direccion de la particula
part_type_life(particula_nieve,180,210); //Duracion de la particula
//Creamos en el emisor
nieve_emisor = part_emitter_create(nieve);
//Establecer region de la habitacion donde se creara el emisor, el perfil y la forma de distribucion
part_emitter_region(nieve,nieve_emisor,0-100,room_width+100,-10,room_height-5,ps_shape_ellipse,ps_distr_linear);
//Empezamos a emitir particulas cada 0.20 segundos
part_emitter_stream(nieve,nieve_emisor,particula_nieve,-5);
Se supone que era un ejemplo, no que lo tenías que copiar tal cual como estaba -_- XD. Lee la documentación y adapta la función a tu código.
Cita de: NiuWeb en Octubre 13, 2017, 01:33:06 AM
Se supone que era un ejemplo, no que lo tenías que copiar tal cual como estaba -_- XD. Lee la documentación y adapta la función a tu código.
No pude adaptarlo.
................................................
En tu caso sería así:
[gml]
particula_nieve = part_type_create();
part_type_sprite(particula_nieve, sprCorazon, true, true, false); //La forma de la particula
part_type_color1(particula_nieve,55295); //El color de la particula
part_type_orientation(particula_nieve,0,0,0,0,1); //La rotacion aleatoria de la particula
part_type_size(particula_nieve,0.05,0.25,0,0); //Tamaño aleatorio de la particula
part_type_speed(particula_nieve,1,1.5,0.05,0); //Velocidad de la particula
part_type_direction(particula_nieve,180,180,0,4); //Direccion de la particula
part_type_life(particula_nieve,180,210); //Duracion de la particula
[/gml]
Realmente pienso que era sólo cuestión de leer.
Cita de: NiuWeb en Octubre 13, 2017, 05:58:33 PM
................................................
En tu caso sería así:
[gml]
particula_nieve = part_type_create();
part_type_sprite(particula_nieve, sprCorazon, true, true, false); //La forma de la particula
part_type_color1(particula_nieve,55295); //El color de la particula
part_type_orientation(particula_nieve,0,0,0,0,1); //La rotacion aleatoria de la particula
part_type_size(particula_nieve,0.05,0.25,0,0); //Tamaño aleatorio de la particula
part_type_speed(particula_nieve,1,1.5,0.05,0); //Velocidad de la particula
part_type_direction(particula_nieve,180,180,0,4); //Direccion de la particula
part_type_life(particula_nieve,180,210); //Duracion de la particula
[/gml]
Realmente pienso que era sólo cuestión de leer.
La pantalla permanece completamente oscura sin hacer nada.
///Sistema de particula
particula_nieve = part_type_create();
part_type_sprite(particula_nieve, spr_Corazon, true, true, false); //La forma de la particula
part_type_color1(particula_nieve,55295); //El color de la particula
part_type_orientation(particula_nieve,0,0,0,0,1); //La rotacion aleatoria de la particula
part_type_size(particula_nieve,0.05,0.25,0,0); //Tamaño aleatorio de la particula
part_type_speed(particula_nieve,1,1.5,0.05,0); //Velocidad de la particula
part_type_direction(particula_nieve,180,180,0,4); //Direccion de la particula
part_type_life(particula_nieve,180,210); //Duracion de la particula
mmm... es extraño. ¿La consola o el GM te muestran algún error? ¿Cómo creas las partículas (no el emisor ni el tipo, las partículas en sí) en el juego?
Cita de: NiuWeb en Octubre 14, 2017, 03:22:01 AM
mmm... es extraño. ¿La consola o el GM te muestran algún error? ¿Cómo creas las partículas (no el emisor ni el tipo, las partículas en sí) en el juego?
No hay errores si coloco un objeto que crea partículas en la habitación, este lo crea, pero cuando pongo en la habitación el objeto con los códigos que me has demostrado, este simplemente no emite nada, dando la sensación que la habitación esta vacía, no hay error en la consola, simplemente este código no emite nada en la habitación.
O sea, reemplazase los códigos part_type*() que tenías antes por los que utilizan el sprite, ¿verdad? Muestra el código con el que creas las partículas en pantalla.
Cita de: NiuWeb en Octubre 14, 2017, 04:26:50 AM
O sea, reemplazase los códigos part_type*() que tenías antes por los que utilizan el sprite, ¿verdad? Muestra el código con el que creas las partículas en pantalla.
Aquí tienes el panorama completo
spr_Corazon
obj_Particula_Corazon (Sin sprite)
CREATE:
///Sistema de particula
particula_nieve = part_type_create();
part_type_sprite(particula_nieve, spr_Corazon, true, true, false); //La forma de la particula
part_type_color1(particula_nieve,55295); //El color de la particula
part_type_orientation(particula_nieve,0,0,0,0,1); //La rotacion aleatoria de la particula
part_type_size(particula_nieve,0.05,0.25,0,0); //Tamaño aleatorio de la particula
part_type_speed(particula_nieve,1,1.5,0.05,0); //Velocidad de la particula
part_type_direction(particula_nieve,180,180,0,4); //Direccion de la particula
part_type_life(particula_nieve,180,210); //Duracion de la particula
Resultado final: No pasa nada en la habitación cuando este objeto esta presente, en cambio cuando aplico el obj_Particula_Nieve, hay efecto de nevacion, tengo la sencacion de que estamos omitiendo algo como:
//Creamos en el emisor
nieve_emisor = part_emitter_create(nieve);
//Establecer region de la habitacion donde se creara el emisor, el perfil y la forma de distribucion
part_emitter_region(nieve,nieve_emisor,0-100,room_width+100,-10,-5,ps_shape_ellipse,ps_distr_linear);
//Empezamos a emitir particulas cada 0.20 segundos
part_emitter_stream(nieve,nieve_emisor,particula_nieve,-5);
Que tiene el obj_Particula_Nieve.
Pues claro, hay que crear el emisor. El código de abajo es lo que deberías tener en el objeto de partícula corazón.
Por lo que veo, necesitas de los dos sistemas: El de la nieve y el de los corazones; utiliza otra variable como emisor, no modifiques el de la nieve
Cita de: NiuWeb en Octubre 14, 2017, 05:53:37 AM
Pues claro, hay que crear el emisor. El código de abajo es lo que deberías tener en el objeto de partícula corazón.
Por lo que veo, necesitas de los dos sistemas: El de la nieve y el de los corazones; utiliza otra variable como emisor, no modifiques el de la nieve
Esto tendría.
///Sistema de particula
particula_corazon = part_type_create();
part_type_sprite(particula_corazon, spr_Corazon, true, true, false); //La forma de la particula
part_type_color1(particula_corazon,55295); //El color de la particula
part_type_orientation(particula_corazon,0,0,0,0,1); //La rotacion aleatoria de la particula
part_type_size(particula_corazon,0.05,0.25,0,0); //Tamaño aleatorio de la particula
part_type_speed(particula_corazon,1,1.5,0.05,0); //Velocidad de la particula
part_type_direction(particula_corazon,180,180,0,4); //Direccion de la particula
part_type_life(particula_corazon,180,210); //Duracion de la particula
//Creamos en el emisor
corazon_emisor = part_emitter_create(corazon);
//Establecer region de la habitacion donde se creara el emisor, el perfil y la forma de distribucion
part_emitter_region(nieve,corazon_emisor,0-100,room_width+100,-10,-5,ps_shape_ellipse,ps_distr_linear);
//Empezamos a emitir particulas cada 0.20 segundos
part_emitter_stream(corazon,corazon_emisor,particula_corazon,-5);
Y esto provocaría al encender el juego.
FATAL ERROR in
action number 1
of Create Event
for object obj_Particula_Corazon:
Variable obj_Particula_Corazon.corazon(100024, -2147483648) not set before reading it.
at gml_Object_obj_Particula_Corazon_CreateEvent_1 (line 12) - corazon_emisor = part_emitter_create(corazon);
part_type_emitter toma un sistema de particulas como parametro
El cual no esta definido en ninguna parte del codigo, por lo que te da error.
soluvionarlo es tan facil como crear un part_system.
Cita de: Ashe de Freljord en Octubre 14, 2017, 12:45:26 PM
part_type_emitter toma un sistema de particulas como parametro
El cual no esta definido en ninguna parte del codigo, por lo que te da error.
soluvionarlo es tan facil como crear un part_system.
Si fuera tan fácil no estaría preguntando, tal vez es fácil para aquel que tenga los conocimientos de como solucionarlo, pero no uso partículas con sprite en mi juego como para entenderlo a la primera.
Te falta una línea como ésta:
[gml]corazon = part_system_create();
[/gml]
Cita de: NiuWeb en Octubre 15, 2017, 02:19:46 AM
Te falta una línea como ésta:
[gml]corazon = part_system_create();
[/gml]
A Pesar de que tengo el emisor y probablemente todo lo requerido la pantalla continua vacía sin efectos.
///Sistema de particula
corazon = part_system_create();
particula_corazon = part_type_create();
part_type_sprite(particula_corazon, spr_Corazon, true, true, false); //La forma de la particula
part_type_color1(particula_corazon,55295); //El color de la particula
part_type_orientation(particula_corazon,0,0,0,0,1); //La rotacion aleatoria de la particula
part_type_size(particula_corazon,0.05,0.25,0,0); //Tamaño aleatorio de la particula
part_type_speed(particula_corazon,1,1.5,0.05,0); //Velocidad de la particula
part_type_direction(particula_corazon,180,180,0,4); //Direccion de la particula
part_type_life(particula_corazon,180,210); //Duracion de la particula
//Creamos en el emisor
corazon_emisor = part_emitter_create(corazon);
//Establecer region de la habitacion donde se creara el emisor, el perfil y la forma de distribucion
part_emitter_region(corazon,corazon_emisor,0-100,room_width+100,-10,-5,ps_shape_ellipse,ps_distr_linear);
//Empezamos a emitir particulas cada 0.20 segundos
part_emitter_stream(corazon,corazon_emisor,particula_corazon,-5);
No hay errores en la consola, simplemente el código no esta asiendo nada en la habitación.
El error está en el tamaño de la partícula. Es demasiado pequeño como para que se vea el sprite. Aumenta su tamaño.
Cita de: NiuWeb en Octubre 15, 2017, 03:12:45 AM
El error está en el tamaño de la partícula. Es demasiado pequeño como para que se vea el sprite. Aumenta su tamaño.
En el part_type_size()
convertí sus decimales en números enteros para que tenga un tamaño mínimo y máximo, la habitación sigue vacía, incluso agregue valores de 10 a 100 para ver si era el tamaño y resulta que al hacer esto los sprite ya estarían midiendo como 32x32 a 320x320, dentro de una habitación con tamaño por defecto deberían verse como corazones gigantes cayendo pero no pasa nada.
¿Estas seguro que los errores están en que estamos usando un sprite en vez de usar código?
Cita de: Naitsabes0 en Octubre 15, 2017, 03:42:13 AM
¿Estas seguro que los errores están en que estamos usando un sprite en vez de usar código?
Y dale con eso. "El problema no es mi código, es que el GML funciona mal". ¿Por qué en todas las preguntas sales con lo mismo?
Ahora a la cuestión, ¿En qué eventos ejecutas este código?
[gml]
//Creamos en el emisor
part_emitter_stream(corazon,corazon_emisor,particula_corazon,-5);
[/gml]
Ten en cuenta que esa línea de código
es la que crea las partículas en la sala, por lo que si lo ejecutas en el evento create ahí está el problema. Yo copié este código en un proyecto vacío:
[gml]
///--------TODO ESTO EN EL EVENTO CREATE--------------
corazon = part_system_create();
particula_corazon = part_type_create();
part_type_sprite(particula_corazon, spr_Corazon, true, true, false); //La forma de la particula
part_type_color1(particula_corazon, 55295); //El color de la particula
part_type_orientation(particula_corazon, 0, 0, 0, 0, 1); //La rotacion aleatoria de la particula
//part_type_size(particula_corazon, 0.05, 0.25, 0, 0); //Tamaño aleatorio de la particula
part_type_speed(particula_corazon, 1, 1.5, 0.05, 0); //Velocidad de la particula
part_type_direction(particula_corazon, 270, 270, 0, 4); //Direccion de la particula
part_type_life(particula_corazon, 180, 210); //Duracion de la particula
corazon_emisor = part_emitter_create(corazon);
//Establecer region de la habitacion donde se creara el emisor, el perfil y la forma de distribucion
part_emitter_region(corazon,corazon_emisor,100,room_width-100,10,room_height - 10,ps_shape_ellipse,ps_distr_linear);
alarm[0] = room_speed;
[/gml]
(Modifiqué el área en
part_emitter_region())
Y este:
[gml]
///-------------TODO ESTE EN EL EVENTO ALARM[0]---------
part_emitter_stream(corazon,corazon_emisor,particula_corazon,-5);
alarm[0] = room_speed;
[/gml]
Y al probar,
voilà:
(https://dl.dropbox.com/s/whr13rtu2so7cul/GIF4.gif?dl=0)
La función part_emitter_stream crea partículas constantemente así que no importa si solo esta en create, estas pensando en part_emitter_burst, que en efecto solo crea las partículas cuando la llamas.
El problema de tu código es la dirección de las partículas, las estas creando por encima del room y con dirección a la izquierda, de manera que nunca entran al area visible del room, cámbiales la dirección o agrégales gravedad hacia abajo (270) para que entren al room.