Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: abramelin en Marzo 28, 2014, 06:01:54 PM

Título: transicion entre rooms mascaras (solucionado)
Publicado por: abramelin en Marzo 28, 2014, 06:01:54 PM
¿se pueden crear transiciones entre rooms como las que vienen por defecto (fade, blend, rotate...) ?? me gustaria crear una cortinilla de hojas entre algunas rooms, pero no se si esto es posible en gm
Título: Re:transicion entre rooms
Publicado por: vampy09 en Marzo 28, 2014, 07:21:32 PM
Fade Out

obj_FadeOut
depth = -1000000

Evento Create
alpha=1;

Evento Step
if alpha>0
{
alpha-=0.01;
}
else room_goto(room_elquesea);


Evento Draw
draw_set_alpha(alpha);
draw_rectangle(0, 0, room_width, room_height,
false);
draw_set_alpha(1);


Mayor info: http://gmc.yoyogames.com/index.php?showtopic=362339 (http://gmc.yoyogames.com/index.php?showtopic=362339)
Título: Re:transicion entre rooms
Publicado por: abramelin en Marzo 28, 2014, 10:33:51 PM
pero no me refiero a hacer un fade de opacidad, eso ya viene por defecto. imagina el efecto de entrelazado o el que quieras, pero en lugar de hacerlo con ambas rooms (de una room a otra), hacerlo con una imagen. para dar la sensacion de cortinilla. no se si me ha explicado bien
Título: Re:transicion entre rooms
Publicado por: penumbra en Marzo 28, 2014, 10:56:49 PM
Sí, se pueden crear transiciones personalizadas, usando una función que está muy poco documentada en el manual.

http://gmc.yoyogames.com/index.php?showtopic=362339 (http://gmc.yoyogames.com/index.php?showtopic=362339)

Aunque yo estoy teniendo problemas en mi juego para aplicar una transición. Consultando los foros de GMC he visto que otros usuarios tienen problemas similares cuando se usan vistas, aun estoy intentando solucionarlo, si tu lo logras, avisa.

EDIT: Aunque ese efecto de cortinilla probablemente no requiera del método al que me refiero, sino de crear tu propia transición, para lo cual yo usaría surfaces
Título: Re:transicion entre rooms
Publicado por: Killer en Marzo 28, 2014, 11:36:54 PM
Creo entender, pero la creación de transiciones puede ser algo complicado, debes crear un script que controlara la transición, donde argument0 y argument1 contienen superficies con la imagen del room origen y el room destino, respectivamente, el argument2 y el argument3 el ancho y alto de las superficies y el argument4 la posición temporal actual de la transición.

Dentro del script debes poner el comportamiento de la transición, es decir, lo que debe dibujar y la manera en que debe ser dibujado, por ejemplo:


/*
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 i,P;

if argument4 < 0.5 draw_surface(argument0,0,0);
else draw_surface(argument1,0,0);

if argument4 < 0.25
  P = argument4 * 2;
if argument4 >= 0.25 && argument4 < 0.75
  P = 0.5;
if argument4 >= 0.75
  P = (argument4 - 0.5)*2;

for(i = 0;i<argument3/16;i+=2)
  draw_background_part(background0,0,i*16,argument2,16,0-argument2*(1-P*2),16*i);
for(i = 1;i<argument3/16;i+=2)
  draw_background_part(background0,0,i*16,argument2,16,argument2-argument2*P*2,16*i);


Este código dibujaría primero la superficie del room origen hasta la mitad de la transición, y pasada la mitad dibujara la superficie del room destino.

También dibuja el background0 en tiras que aparecen a los lados, moviéndolas según la posición temporal de la transición, dando una pequeña pausa cuando el background esta completo para que se pueda apreciar.

Una vez que tienes un script listo para transformarlo en transición debes usar la función transition_define, donde debes pasarle el número de ID que usara la transición y el nombre del script que usa como una string:

transition_define(99,"tr_strings")

La ID que le asignas a la transición es la que debes usar cuando la quieras usar:

transition_kind = 99
room_goto(room1)


Es un tema un tanto complejo si no tienes experiencia en ello, te dejo un ejemplo con el script que acabo de poner para que lo veas en acción.

El problema cuando se usan views es que las superficies necesarias para las transiciones deben tener las mismas dimensiones, por lo que si views son distintas de un room a otro no funcionan bien. 
Título: Re:transicion entre rooms
Publicado por: abramelin en Marzo 28, 2014, 11:44:33 PM
perfecto, he estado mirando un poco el link por encima y parece que se puede hacer lo que quiero, en cuanto al ejemplo me lo miro y exploro con detenimiento, porque estoy bastante pegado en surfaces, asi de paso aprendo un poco. gracias a todos por la ayuda
Título: Re:transicion entre rooms
Publicado por: penumbra en Marzo 29, 2014, 12:11:15 AM
El ejemplo de Killer y el link que puse tratan del mismo método.

Cita de: Killer en Marzo 28, 2014, 11:36:54 PM
El problema cuando se usan views es que las superficies necesarias para las transiciones deben tener las mismas dimensiones, por lo que si views son distintas de un room a otro no funcionan bien. 

Segun entiendo, las dimensiones de las superficies A y B dependen de la vista y no del tamaño de la habitación, ¿es así? En mi juego, de momento la vista es una sola, por lo que la dimensión de la superficie debería ser siempre la misma, incluso las habitaciones que tengo tienen el mismo tamaño de momento. El problema es que efectuarse la transición, la superficie A muestra el inicio de la habitación anterior, cuando debería mostrar el final de esa habitación (pues la transición se hace al llegar al final de la habitación) .

Espero dar con alguna solución pronto.
Título: Re:transicion entre rooms
Publicado por: abramelin en Marzo 29, 2014, 02:34:29 AM
despues de estar un rato trasteando con el ejemplo de killer, se me plantea una duda, ya que usas un background entre el entrelazado... ¿ se podria usar la mascara de un sprite para hacer la transicion? porgo una imagen a ver si entendeis lo que quiero decir.
Título: Re:transicion entre rooms
Publicado por: Killer en Marzo 30, 2014, 04:35:00 AM
No comprendo lo que quieres decir con "máscara de un sprite", la máscara de un sprite usualmente se refiere a su área de colisión, que no es algo que normalmente se dibuje.

En todo caso, cualquier cosa que se pueda dibujar se puede usar en las transiciones sin mayor problema, en el ejemplo que deje viene otra transición, la de voltear página, si la viste notarás que en ella se dibujan rectángulos, líneas e incluso una tercera superficie.
Título: Re:transicion entre rooms
Publicado por: abramelin en Marzo 30, 2014, 05:17:46 AM
digo mascara porque lo unico que se necesitaria para hacer lo que quiero es el borde de la imagen, en la imagen que he adjuntado en el mensaje anterior sale una estrella/cualquier sprite , lo que quiero es saber si se puede crear la transicion desde la room A hasta la room B con el sprite (ojo no que se vea el sprite, sino que sirva como mascara para la room B en la transicion). no se como explicarlo mejor.
tu has puesto en tu ejemplo un entrelazado, ese entrelazado son tiras rectangulares, lo que quiero es poder cambiar eso, la transicion en si, que la forma que haga sea a partir de una imagen y no tiras rectangulares, etc.

tu ejemplo es cojonudo y lo usare para alguna que otra transicion, pero me gustaria hacer exactamente lo que quiero como cortinilla principal para el juego, espero que podais ayudarme
Título: Re:transicion entre rooms
Publicado por: penumbra en Marzo 31, 2014, 11:33:54 PM
¿Te refieres a algo así?

La máscara es una imagen de batman que descargué de la red.

(http://sim1.subirimagenes.net/img/2014/03/31/140331112109189785.gif)

Era cuestión de honor resolver mi problema con las transiciones personalizadas, así que estuve trasteando y por fin logré solucionarlo. Aproveché para jugar un poco más y después de batallar un poco, pude usar sprites como máscaras en el sistema de transiciones. En un rato subo el script a la sección de ejemplos

EDITADO: Script subido, enlace:
http://www.comunidadgm.org/desarrollo-de-scripts/transicion-personalizada-enmascarar-la-vista-mediante-sprite/msg95798/#msg95798 (http://www.comunidadgm.org/desarrollo-de-scripts/transicion-personalizada-enmascarar-la-vista-mediante-sprite/msg95798/#msg95798)

Título: Re:transicion entre rooms
Publicado por: abramelin en Abril 01, 2014, 12:39:29 AM
yea, exactamente eso era a lo que me referia. eres un makina, esperando el link para trastearlo