Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: J.E.A en Julio 10, 2010, 05:04:58 PM

Título: Pausar todo mientras Mario se convierte
Publicado por: J.E.A en Julio 10, 2010, 05:04:58 PM
Como podria hacer para que Mario al convertirse se haga una especie de pausa?
Título: Re: Pausar todo mientras Mario se convierte
Publicado por: DEADOFALL en Julio 11, 2010, 12:08:33 AM
Cita de: J.E.A en Julio 10, 2010, 05:04:58 PM
Como podria hacer para que Mario al convertirse se haga una especie de pausa?
Con la accion SLEEP (D&D)
Título: Re: Pausar todo mientras Mario se convierte
Publicado por: Herni en Julio 11, 2010, 12:48:30 AM
Cita de: DEADOFALL en Julio 11, 2010, 12:08:33 AM
Cita de: J.E.A en Julio 10, 2010, 05:04:58 PM
Como podria hacer para que Mario al convertirse se haga una especie de pausa?
Con la accion SLEEP (D&D)

Pero eso paraliza todo, no? Incluyendo al propio Mario o no?

Supongo que lo que querr? es que todo, menos mario, se quede paralizado, mientras mario se est? transformando en grande, o en fuego, o lo que sea.


Un saludo,
- Herni
Título: Re: Pausar todo mientras Mario se convierte
Publicado por: DEADOFALL en Julio 11, 2010, 06:09:05 AM
Cita de: Herni en Julio 11, 2010, 12:48:30 AM
Cita de: DEADOFALL en Julio 11, 2010, 12:08:33 AM
Cita de: J.E.A en Julio 10, 2010, 05:04:58 PM
Como podria hacer para que Mario al convertirse se haga una especie de pausa?
Con la accion SLEEP (D&D)

Pero eso paraliza todo, no? Incluyendo al propio Mario o no?

Supongo que lo que querr? es que todo, menos mario, se quede paralizado, mientras mario se est? transformando en grande, o en fuego, o lo que sea.


Un saludo,
- Herni
?Has jugado mario bros? Por si no te has dado cuenta, se paraliza TODO, hasta el mario ;)
Título: Re: Pausar todo mientras Mario se convierte
Publicado por: ledillman en Julio 11, 2010, 06:17:02 AM
te recomiendo hacer algun script o codigo que haga que todos los objetos se queden paralizados nada mas, con movimiento nulo y 0 de velocidad. A mi me funciona xD, o si no debo improvisar
Título: Re: Pausar todo mientras Mario se convierte
Publicado por: Herni en Julio 11, 2010, 04:37:11 PM
Cita de: DEADOFALL en Julio 11, 2010, 06:09:05 AM
Cita de: Herni en Julio 11, 2010, 12:48:30 AM
Cita de: DEADOFALL en Julio 11, 2010, 12:08:33 AM
Cita de: J.E.A en Julio 10, 2010, 05:04:58 PM
Como podria hacer para que Mario al convertirse se haga una especie de pausa?
Con la accion SLEEP (D&D)

Pero eso paraliza todo, no? Incluyendo al propio Mario o no?

Supongo que lo que querr? es que todo, menos mario, se quede paralizado, mientras mario se est? transformando en grande, o en fuego, o lo que sea.


Un saludo,
- Herni
?Has jugado mario bros? Por si no te has dado cuenta, se paraliza TODO, hasta el mario ;)

Pues claro que he jugado.

Mario se queda quieto en el sitio, pero su sprite sigue cambiando hasta la forma del power-up que haya cogido, mientras que el resto realmente queda 100% inm?vil, incluso los martillos que lanzan los hermanos martillo, que en s? (los martillos) no son enemigos propiamente dicho, son objetos que te pueden matar.

Y lo que quiero decir es que con el Sleep, si no me equivoco, dejas todo el juego paralizado, incluso los sprites animados, y no creo que sea lo que est? buscando, el querr? que se vaya transformando mientras el resto del mundo queda paralizado.

Si luego resulta que me equivoco y el Sleep mantiene los Sprites animados "anim?ndose" valga la redundancia... pues entonces que use el Sleep del D&D.


Un saludo,
- Herni
Título: Re: Pausar todo mientras Mario se convierte
Publicado por: J.E.A en Julio 11, 2010, 06:18:50 PM
Si se queda todo quieto menos Mario convirtiendose, tampoco se tendria que quedar quieto el puntaje del hongo que dice 1000 cuando lo agarras. Pruebo con sleep y despues les aviso si me fue bien :)
Título: Re: Pausar todo mientras Mario se convierte
Publicado por: Genesis en Julio 11, 2010, 07:43:43 PM
Les explico lo k el trata de hacer...
lo k kiere es k ningun objeto del juego se mueva, ni mario, solo k mario se este convirtiendo(con el sprite  k este animado) y los demas objetos paren sus subimagenes y sus velocidad verticales o horizontales, ya, entienden?
Título: Re: Pausar todo mientras Mario se convierte
Publicado por: Herni en Julio 11, 2010, 07:58:58 PM
Cita de: Genesis en Julio 11, 2010, 07:43:43 PM
Les explico lo k el trata de hacer...
lo k kiere es k ningun objeto del juego se mueva, ni mario, solo k mario se este convirtiendo(con el sprite  k este animado) y los demas objetos paren sus subimagenes y sus velocidad verticales o horizontales, ya, entienden?

S?, s?, es lo que he puesto yo en mi ?ltimo post.

La ?nica idea que se me ocurre es que cualquier enemigo y objeto del escenario est? asociado a un objeto parent que tenga un evento encargado de hacer las siguientes operaciones:

* Guardar en una variable la speed actual del objeto
* Poner la variable speed a 0
* Y activar una alarma de duraci?n x steps (n?mero de steps estimados de la transformaci?n) que reestablezca la speed al valor almacenado en la variable.


Un saludo,
- Herni
Título: Re: Pausar todo mientras Mario se convierte
Publicado por: SP_Christian en Julio 11, 2010, 09:31:31 PM
Tus amigos son:

1. Crear un background con la vision de la view actual y asignarlo a una variable

2. Desactivar todas las instancias menos la de mario

3. Que un objeto se encargue de dibujar el background

4. Cuando mario este transformado, eliminar el objeto que
   dibuja el background y reactivar todas las demas instancias


Yo tengo un codigo asi en end step:

if keyboard_check_pressed(vk_enter) || keyboard_check_pressed(vk_escape){

if global.pause = false{
global.pause_back = background_create_from_screen(0,0,640,480,0,0)
global.pause = true;
view_wview=640
view_hview=480
instance_deactivate_all(1);
}
else{
instance_activate_all();
global.pause=false;
view_wview=320
view_hview=240

}
}


Asi de primeras no creo que te funcione, deberas jugar con ese codigo.
En el evento draw se dibuja el background 'global.pause_back'.

Y tambien necesitaras inicializar todas las variables en Create
Título: Re: Pausar todo mientras Mario se convierte
Publicado por: Killer en Julio 12, 2010, 03:10:40 AM
Cambia al sprite al de la animaci?n, usa un bucle que termine cuando se completa la animaci?n, en su interior redibuja la pantalla, coloca una peque?a pausa y luego aumenta la posici?n de la animaci?n.


sprite_index = spr_AniMario;
image_index = 0;
while (image_index < image_number){
screen_redraw();
sleep(1000/room_speed);
image_index += 1;
}
Título: Re: Pausar todo mientras Mario se convierte
Publicado por: Herni en Julio 12, 2010, 05:50:50 AM
Cita de: Killer en Julio 12, 2010, 03:10:40 AM
Cambia al sprite al de la animaci?n, usa un bucle que termine cuando se completa la animaci?n, en su interior redibuja la pantalla, coloca una peque?a pausa y luego aumenta la posici?n de la animaci?n.


sprite_index = spr_AniMario;
image_index = 0;
while (image_index < image_number){
screen_redraw();
sleep(1000/room_speed);
image_index += 1;
}


No est? nada mal, creo que no quedar?a 100% inm?vil los objetos, pero s? pr?cticamente al 99'9%, ser?a practicamente inapreciable.

Lo que no s? es por qu? usas el sleep como (1000/room_speed), ?no ser?a m?s sencillo dar el tiempo directamente en plan sleed(25)? Lo digo pensando en los posibles valores que puede tener la speed de una room.

Vamos... si no me equivoco sleep pide un par?metro que son el n?mero de milisegundos, entonces dependiendo de los posibles valores de room_speed:
room_speed = 15; el sleep ser?a de 66 milisegundos.
room_speed = 30; el sleep ser?a de 33 milisegundos.
room_speed = 45; el sleep ser?a de 22 milisegundos.
room_speed = 60; el sleep ser?a de 16 milisegundos.

Y as? a menos milisegundos si aumenta la room_speed, por eso digo lo de poner los milisegundos directamente, no s?... es s?lo una alternativa.


Un saludo,
- Herni
Título: Re: Pausar todo mientras Mario se convierte
Publicado por: Hackware en Julio 12, 2010, 06:46:01 AM
Que va... el m?todo de Killer es mejor por la sencilla raz?n de que 30 frames (room_speed est?ndar) no siempre son iguales a 1000 milisegundos (1 segundo). La f?rmula de Killer corrige eso, de modo que si la room_speed es de 60 frames (el doble a lo usual) la animaci?n s?lo deber? durar 500 milisegundos (la mitad del tiempo), es decir ?se ajusta solita! XD

Por cierto, jam?s se me hubiera ocurrido hacerlo as?. Killer nunca deja de fascinarme con sus respuestas tan claras y acertadas.
Título: Re: Pausar todo mientras Mario se convierte
Publicado por: Herni en Julio 12, 2010, 07:34:48 AM
Cita de: Hackware en Julio 12, 2010, 06:46:01 AM
Que va... el m?todo de Killer es mejor por la sencilla raz?n de que 30 frames (room_speed est?ndar) no siempre son iguales a 1000 milisegundos (1 segundo). La f?rmula de Killer corrige eso, de modo que si la room_speed es de 60 frames (el doble a lo usual) la animaci?n s?lo deber? durar 500 milisegundos (la mitad del tiempo), es decir ?se ajusta solita! XD

Por cierto, jam?s se me hubiera ocurrido hacerlo as?. Killer nunca deja de fascinarme con sus respuestas tan claras y acertadas.

Lo siento debo de ser alto tonto, pero sigo sin entenderlo :-[

Pongamos un ejemplo un tanto raro, partiendo de que los creadores originales del Mario hubiesen utilizado GameMaker y una room_speed de 30 steps por segundo.
Ahora utilizamos la funci?n sleep que dice killer => Sleep(1000/room_speed) => Sleep(1000/30) => Sleep(33,333)

Si el sprite de transformar a Mario de normal (no peque?o) a fuego, tiene 5 frames, tardar? 33 milisegundos en avanzar al siguiente frame del sprite, lo que nos da un tiempo total de transformaci?n de 33,333*5 = 166 milisegundos.

Ahora supongamos que los del Mario deciden hacer que los movimientos sean m?s suaves incrementando la room_speed a 60 steps por segundo,
Utilizamos de nuevo la funci?n sleep que dice killer => Sleep(1000/room_speed) => Sleep(1000/60) => Sleep(16,666)

Como nuestro sprite de transformaci?n tiene 5 frames, a un ritmo de 16 milisegundos entre frames del sprite, nos da un tiempo total de transformaci?n 16,666*5 = 83 milisegundos.


Vamos, que si deciden cambiar la velocidad de la room adaptando la velocidad de movimiento de los objetos a la nueva room_speed, los objetos se mover?an la misma distancia en el mismo tiempo pero de una manera m?s suave, pero la transformaci?n en lugar de tardar 166 milisegundos tardar?a la mitad, 83 milisegundos.


Otro suponer que, de alg?n modo, nos dieran la posibilidad de elegir la room_speed (en concepto de calidad, y siempre que los movimientos de los objetos est?n como digo bien adaptados a la room_speed) y tengo un equipo de la leche y pongo room_speed a 120, las transformaci?n de Mario ser?an de Sleep(1000/120) => Sleep(8,333), as? que Mario tardar?a en convertirse 41 milisegundos, vamos que ni lo apreciar?a, ver?a pr?cticamente un cambio instant?neo.


?Por eso pregunto si no ser?a m?s l?gico directamente poner Sleep(30), por ejemplo, y as? independientemente de la room_speed la transformaci?n de Mario siempre durar?a lo mismo?


Puede que est? equivocado, muy probable, pero por c?mo funciona la funci?n Sleep no lo veo l?gico :-\


Por favor s?quenme de dudas.


Muchas gracias a tod@s, un saludo,
- Herni
Título: Re: Pausar todo mientras Mario se convierte
Publicado por: Killer en Julio 12, 2010, 08:35:39 AM
Ten en cuenta que no basta con aumentar la velocidad de la room para hacer los movimientos de los sprites m?s suaves, tambi?n debe modificarse el sprite, agregar los frames "intermedios" a los ya existentes para que la animaci?n sea realmente m?s suave y no solo m?s r?pida.

La manera en que se usa el sleep en el c?digo es para que la animaci?n se vea igual a como se ver?a fuera del bucle, si quieres que la animaci?n sea m?s suave la debes mejorar a medida que aumentas la room_speed.
Título: Re: Pausar todo mientras Mario se convierte
Publicado por: Hackware en Julio 12, 2010, 08:41:16 AM
La verdad es que eso depende finalmente del desarrollador. Si ?l desea que la velocidad sea siempre la misma a pesar de la room_speed, pues se ahorrar? la f?rmula y pondr? el valor constante en su lugar. O en caso contrario, si el juego exige que ambas velocidades permanezcan sincronizadas pues se ir? por el m?todo de Killer.
Título: Re: Pausar todo mientras Mario se convierte
Publicado por: Herni en Julio 12, 2010, 11:57:46 AM
Cita de: Killer en Julio 12, 2010, 08:35:39 AM
Ten en cuenta que no basta con aumentar la velocidad de la room para hacer los movimientos de los sprites m?s suaves, tambi?n debe modificarse el sprite, agregar los frames "intermedios" a los ya existentes para que la animaci?n sea realmente m?s suave y no solo m?s r?pida.

La manera en que se usa el sleep en el c?digo es para que la animaci?n se vea igual a como se ver?a fuera del bucle, si quieres que la animaci?n sea m?s suave la debes mejorar a medida que aumentas la room_speed.

En ese caso estoy de acuerdo, pero yo al responder me basaba en los sprites ya existentes de Mario y que mucha gente reutiliza, si se los hace ?l (o se los hace alguien) y puede meter m?s frames al sprite ser?a cojonudo XD


Un saludo,
- Herni
Título: Re: Pausar todo mientras Mario se convierte
Publicado por: Genesis en Julio 17, 2010, 08:05:54 PM
pues me imgaingo k tambn se puede una variable , por ejemplo
if canmove=true
{
speed=5
vspeed=5
hspeed=5
} o algo asi