Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Vector en Marzo 30, 2010, 09:00:13 PM

Título: Transition Rooms
Publicado por: Vector en Marzo 30, 2010, 09:00:13 PM
Alguien podr?a hacerme un ejemplo de como hacer transiciones en c?digo,tanto con las transiciones comunes como para transiciones del extension package. Es que no entiendo lo de Kind , Ts_Set_Transition y otras cosas m?s.  (Un ejemplo adjunto escrito no hace falta uno en el GM)

                Gracias, espero sus respuestas.
Título: Re: Transition Rooms
Publicado por: soccer2008 en Marzo 31, 2010, 10:09:09 PM
creo q te refieres a esto o me equivoco????


Citartransition_kind Indicates the next frame transition (0-17).
transition_time Total time used for the transition (in milliseconds).
transition_steps Number of steps for the transition.
Título: Re: Transition Rooms
Publicado por: Hackware en Marzo 31, 2010, 10:16:27 PM
M?s bien creo que se trata de una funci?n reciente llamada transition_add o transition_create (sino es gallo es gallina XD). Se supone que nos permite crear nuestras propias transiciones con c?digo, pero requiere que se mantengan ciertos argumentos como kind y otros. Lo que pasa es que no tengo el GM a la mano as? que no estoy seguro de los nombres.

La verdad yo tampoco s? usarla, pero estoy casi seguro que a eso es lo que se refiere Vector.
Título: Re: Transition Rooms
Publicado por: soccer2008 en Marzo 31, 2010, 10:21:02 PM
Probablemente tengas razon Hackware, pero al menos aporte hasta lo q entendi XD XD XD
Título: Re: Transition Rooms
Publicado por: Killer en Abril 01, 2010, 12:55:52 AM
De hecho me parece que lo que quiere es simplemente saber como usar c?digo para activar las transiciones. En cuyo caso soccer2008 tendr?a raz?n.

Si de eso se trata, lo ?nico que debes hacer es utilizar la variable transition_kind, ten en cuenta que transition_kind solo afecta la pr?xima transici?n, as? que debes utilizarlo cada vez que cambias de room:

transition_kind = 5;
room_goto_next();

transition_kind = tr_melt;
room_goto_previous();


En el manual viene la transici?n equivalente a cada indice, y al utilizar la expansi?n de transiciones puedes usar los nombres que vienen en su respectiva ayuda. Por cierto, la funci?n transition_time no existe en GM7.


Si por otro lado, como menciona Hackware, lo que quieres es crear tus propias transiciones debes usar la funci?n transition_define, que utiliza dos argumentos, el indice de la transici?n y el script que contiene el comportamiento de la transici?n. Aunque antes de que te pongas a hacer transiciones te advierto que es bastante complejo.
Título: Re: Transition Rooms
Publicado por: soccer2008 en Abril 01, 2010, 04:56:39 AM
Muy buena explicaci{on Killer...tbm ser?a cuesti?n q de acuerdo a diferentes valores ya sea aleatorio puedes establecerlas en ciertas variables para de esta manera puedas controlar las transiciones a tu gusto...saludos XD XD XD
Título: Re: Transition Rooms
Publicado por: Vector en Abril 01, 2010, 01:12:00 PM
Gracias a Killer y a los demas que me contestaron. Me gustaria un ejemplo de Transition_define (con todo el proceso de creaci?n) Es que tengo 3 engines de transiciones de la comunidad en ingles y es muy complicado de entender ya que da valores a variables propias y mucho c?digo.
Título: Re: Transition Rooms
Publicado por: elviskelley en Abril 01, 2010, 06:22:46 PM
usa un sprite full scale, y le disminuyes el alpha gradualmente, creo eso te seria lo mas facil de hacer.
Título: Re: Transition Rooms
Publicado por: Killer en Abril 01, 2010, 10:13:27 PM
Pues veamos, lo primero seria crear el script con el comportamiento de la transici?n, el script recibe 5 argumentos, una superficie con la imagen del room origen, una superficie con la imagen del room destino, el ancho de las superficies, el alto de las superficies, y la posici?n actual de la transici?n (de 0 a 1), en ese orden.


Si por ejemplo quieres que la imagen destino cubra por los costados a la imagen origen entonces primero debes dibujar la superficie origen.

Luego haces que la superficie destino se dibuje en dos mitades, cada una al extremo del campo de visi?n, y que su posici?n cambie seg?n la posici?n de la transici?n:

Código (tr_Transicion) [Seleccionar]
/*
argument0 superficie con room de origen
argument1 superficie con room de destino
argument2 ancho de las superficies
argument3 altura de las superficies
argument4 posicion de la transicion
*/
//Dibuja Origen
draw_surface(argument0,0,0);
//Dibuja Destino
draw_surface_part(argument1,0,0,argument2/2,argument3,-(argument2/2)+(argument2/2)*argument4,0);
draw_surface_part(argument1,argument2/2,0,argument2/2,argument3,argument2-(argument2/2)*argument4,0);



Con eso bastar?a para el script. Ahora utilizas transition_define para que el script se utilice como una transici?n:

transition_define(99,tr_Transicion);

Luego, cuando quieras usar la transici?n que creaste usas transition_kind con el index que le elegiste:

transition_set=99;
room_goto_next()


Claro, ese es el ejemplo m?s simple, transiciones m?s complejas tambi?n son posibles, por ejemplo te dejo esta otra transici?n:

Código (tr_PasaPagina) [Seleccionar]
/*
argument0 superficie con room de origen
argument1 superficie con room de destino
argument2 ancho de las superficies
argument3 altura de las superficies
argument4 posicion de la transicion
*/
var S,P,A,X,Y,XX,YY;

S=surface_create(argument2,argument3);
P=abs(1-argument4);
A=70*P;
surface_set_target(S);
//Posiciona
draw_surface(argument0,0,0);
X=lengthdir_x(argument3+argument3*0.25*P,-A+90);
Y=lengthdir_y(argument3+argument3*0.25*P,-A+90);
XX=argument2*P;
YY=argument3-((argument3*0.075)*P)-argument3*0.5*abs(0.5-abs(argument4-0.5));
draw_surface_ext(argument1,XX+X,YY+Y,1+0.25*P,1+0.25*P,-A,c_white,1);
//Borra
draw_set_blend_mode_ext(0,6);
A=45*P;
X=lengthdir_x(argument3*2,-A+90);
Y=lengthdir_y(argument3*2,-A+90);
XX=argument2-argument2*0.5*argument4;
YY=argument3+argument3*0.5*argument4;
draw_surface_ext(argument1,XX+X,YY+Y,2,2,-A,c_black,1);
draw_set_blend_mode(bm_normal);
surface_reset_target();
//Dibuja
draw_surface(argument1,0,0);
if argument4>0.5 draw_set_alpha(0.8-(argument4-0.5)*2);
else draw_set_alpha(0.8);
draw_rectangle(0,0,argument2,argument3,0);
draw_set_alpha(1);
draw_surface(S,0,0);
surface_free(S);


Se supone que es un cambio de p?gina, pero nunca la termine.