Octubre 28, 2014, 02:35:54 PM Ultima modificación: Octubre 28, 2014, 11:45:42 PM por kostra
Buenas, estos días andaré rayando un poco con preguntas... estoy aprendiendo justo ahora, aquí trasteando con rollos srfaces y efectos y tol royo, el caso es, que me miré un tutorial de efecto de fuego muy bonico, la cual es el siguiente:
--
objeto otorch
step:
part_emitter_region(global.ps , global.pe, x-1, x+1, y-1, y+1, ps_shape_rectangle, ps_distr_linear);
part_emitter_burst(global.ps, global.pe, global.pt, 1);

draw:
r = random(0.2)-random(0.2);

draw_set_blend_mode(bm_add);
draw_sprite_ext(slight, 0, x, y+14, 1-r, 1-r, 0, c_yellow, 0.5)
draw_sprite_ext(slight, 0, x, y+14, 1-r, 1-r, 0, c_red, 0.2);
draw_sprite(sprite_index, 0, x , y);


objeto olight
create:
light();

script light //que ya sé que podría ponerlo directo sin script, pero bueno, seguí el tuto al pie de la letra xd
global.ps = part_system_create();
global.pt = part_type_create();
global.pe = part_emitter_create(global.ps);
part_system_depth(global.ps, 99);
part_type_shape(global.pt, pt_shape_flare);
part_type_blend(global.pt, true);
part_type_alpha2(global.pt, 1, 0);
part_type_color_mix(global.pt, c_red, c_yellow);
part_type_direction(global.pt, 90, 90, 0, 0);
part_type_speed(global.pt, 0.1 , 1 ,0 ,0);
part_type_size(global.pt, 0.2, 0.3,0 ,0);
part_type_life(global.pt, 50, 75);


y bueno, el player, al no usar su propio sprite, sinó que uso un script de draw_self que no es más que un script que uso yo siempre con un draw_set_ext con los mismos atributos que el sprite mismo.

Y el problema es...
1 que el player se ve amarillento y veo que es por el draw_set_blend_mode quepongo en el draw del otorch, he visto que poniéndolo a bm_normal se reestablece, pero he probado tanto ponerlo al final del código del draw en otorch, como en el principio del draw del player al dibujar su sprite, pero ocurre que ya todo el código que genera el fuego, ya no sirve... y bueno, como estoy aprendiendo, aun no tengo ni idea de qué hace el código usado en el tuto, el que he puesto, por lo tanto no sé como funciona y menos arreglar este problema... no quiero jugar con un simpson xD
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

Debería bastar con colocar draw_set_blend_mode(bm_normal); al final del script en donde se inicia el nuevo modo de mezclado. O sea:

r = random(0.2)-random(0.2);

draw_set_blend_mode(bm_add);
draw_sprite_ext(slight, 0, x, y+14, 1-r, 1-r, 0, c_yellow, 0.5)
draw_sprite_ext(slight, 0, x, y+14, 1-r, 1-r, 0, c_red, 0.2);
draw_sprite(sprite_index, 0, x , y);
draw_set_blend_mode(bm_normal); // Aquí reestablecemos la forma de dibujo normal


Eso debería bastar, a menos claro que tu personaje tenga un código raro. O ya, el mismo script "draw_self()" que creaste esté mal implementado.




eso es lo que dije que he probado, pero entonces, el efeto ya no me funca, y simplemente no sale nada, ni fueno ni absolutamente nada relacionado al código para el fuego.
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

Eso que te sucede es bastante raro. Eh probado tu código para generar partículas y anda perfectamente, inclusive haciendo la corrección pertinente se dibuja perfecto.  Seguramente el problema esté en otro lado, otros scripts que usen la misma función quizá?



Mira no entendí bien tu problema pero sigamos...  ???

Si el problema es de las partículas, usa esto en vez de draw_set_blend_mode :

part_type_blend(ind,1)

es para ponerle blendig additivo a las particulas.

Black cat, pues no sé, yo ando trasteando, lo probé eso donde tú dijiste, al final, y también lo probé al principio del dibujar el sprite del player, para que lo haga pues eso, "normal" pero lo del fuego ya deja de funcionar y no sé pk :S me puedes explicar por qué me sale amarillento el player? qué hace exactamente esa función (la del titulo del post)... soy new en esto de los surfaces o particulas o lo que sea xd mi vida hasta ahora ha girado entorno a ifs xd

sandbox, para mí hablas en chino, eso qué hago, simplemente suplanto los draw_set_blend_mode por eso que dices? y en ind qué va? xd
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

Subo adjunto 2 archivos.
El primero "def":
que está hecho en base a todo lo expuesto en tu post, particula, objetos y script "light", más la implementeación definida de tu funcion "draw_self()". En este puede verse que inclusive el personaje se dibuja correctamente sin blending. Mientras que las antorchas son las que se ven con ese efecto "amarillento". Esto me da la pauta de que el error no está en lo que nos exponen sino en otro lado.

El segundo "def_corr":
aqui esta la corrección del anterior usando "draw_set_blend_mode(bm_normal)" lo que hace que las anteriores antorchas mencionadas se dibujen correctamente. Redundando en que el personaje aún se dibuja normalmente.


Si esto no soluciona tu problema vas a tener que entender lo que hace el script, porque difícilmente puedas hallar solución a algo que has implementado a ciegas :P . O de ultima nos pasas tu engine.



Cita de: kostra en Octubre 28, 2014, 11:39:30 PM
Black cat, pues no sé, yo ando trasteando, lo probé eso donde tú dijiste, al final, y también lo probé al principio del dibujar el sprite del player, para que lo haga pues eso, "normal" pero lo del fuego ya deja de funcionar y no sé pk :S me puedes explicar por qué me sale amarillento el player? qué hace exactamente esa función (la del titulo del post)... soy new en esto de los surfaces o particulas o lo que sea xd mi vida hasta ahora ha girado entorno a ifs xd

sandbox, para mí hablas en chino, eso qué hago, simplemente suplanto los draw_set_blend_mode por eso que dices? y en ind qué va? xd

ind es donde va el indice de la particula

esto... he vuelto a poner el bm_normal deajo de todo el draw del otorch y pum, se convirtió en chocapic, digo.. que misteriosamente, ahora ya no se ve mi player un simpson... o he tocado algo sin querer (cosa que dudo), o se ha vuelto loco el programa... pero bueno... solucionado O_o

de todos modos, ahora me bajo eso que has adjuntado y me lo estudiaré un poco lo que pueda, a ver si aprendo, muchas gracias :)
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]