Buenas comunidad GM, y saludos a todos los Game Makeros  ;D
Bueno, he estado observando esta comunidad desde hace tiempo, pero nunca había tenido un error, o por lo menos no había necesitado ayuda para resolverlos.

El caso es que en la versión 1.4 de :GMS: estaba haciendo un juego tipo Flappy Bird, pero con algunas modificaciones. Mi duda es,¿Como puedo hacer para que, cuando el jugador muera (choque contra una tubería) pueda darle un botón, y que reviva?.

Me explico mejor: Cuando el personaje muera, mientras que va cayendo al suelo (al colisionar con el suelo, hace que se reinicie el juego) salga un botón que diga "Revivir", que salga un vídeo, y que cuando el jugador termine de ver el vídeo, reviva, y pueda seguir su partida, pero solo quiero que se pueda usar un determinado número de veces.

No se si tendré que modificar algo, pero uso la variable "death" para indicar que el personaje muere, cuando esta variable es igual a 1, el personaje morirá.

Bueno, siento esta explicación tan extensa, pero creo que era necesaria  :D , si necesitáis saber algo mas sobre el proyecto, me lo podéis pedir sin problemas  :)

Saludos, y gracias por leer mi duda.

Hola Azul G. ¿Podrías indicar si usas drag&drop o GML?


Cita de: Guacusio en Septiembre 12, 2015, 09:28:37 PM
Hola Azul G. ¿Podrías indicar si usas drag&drop o GML?

Buenas Guacusio, actualmente uso el lenguaje GML para todos los eventos del juego.

Saludos.

#3 Septiembre 13, 2015, 06:35:49 PM Ultima modificación: Septiembre 13, 2015, 06:44:42 PM por Guacusio
Cuando el personaje muera, crea un objeto botón que en su evento mouse left pressed reviva al personaje. En el evento de colisión del personaje con el suelo destruye este botón. Guarda en una variable global el número de veces que el jugador ha pinchado el botón y haz que el botón sólo sea creado si ese valor es menor al límite del número de resurrecciones permitidas.

colisión del personaje con la tubería:
if global.intentos<=global.intentos_max
   instance_create(a,b,obj_boton);


evento mouse left pressed del botón:
instance_create(c,d,obj_personaje);//o lo que sea que hagas para revivir al personaje
global.intentos+=1;
instance_destroy();


colisión de personaje con el suelo:
with obj_boton
    instance_destroy();


donde a,b y c,d son coordenadas que tienes que definir tú.
global.intentos es la variable que lleva la cuenta de los intentos
global.intentos_max es la variable que indica el número máximo de intentos

Sobre agregar un video, tendrás que buscar una extensión ya que con GML no se puede hacer.


Cita de: Guacusio en Septiembre 13, 2015, 06:35:49 PM
Cuando el personaje muera, crea un objeto botón que en su evento mouse left pressed reviva al personaje. En el evento de colisión del personaje con el suelo destruye este botón. Guarda en una variable global el número de veces que el jugador ha pinchado el botón y haz que el botón sólo sea creado si ese valor es menor al límite del número de resurrecciones permitidas.

colisión del personaje con la tubería:
if global.intentos<=global.intentos_max
   instance_create(a,b,obj_boton);


evento mouse left pressed del botón:
instance_create(c,d,obj_personaje);//o lo que sea que hagas para revivir al personaje
global.intentos+=1;
instance_destroy();


colisión de personaje con el suelo:
with obj_boton
    instance_destroy();


donde a,b y c,d son coordenadas que tienes que definir tú.
global.intentos es la variable que lleva la cuenta de los intentos
global.intentos_max es la variable que indica el número máximo de intentos

Sobre agregar un video, tendrás que buscar una extensión ya que con GML no se puede hacer.

Muchas gracias, ahora lo probare :D

Y si, voy a meter la extensión para Game Maker de admob.

Saludos, y muchas gracias de nuevo.

Cita de: Guacusio en Septiembre 13, 2015, 06:35:49 PM
Cuando el personaje muera, crea un objeto botón que en su evento mouse left pressed reviva al personaje. En el evento de colisión del personaje con el suelo destruye este botón. Guarda en una variable global el número de veces que el jugador ha pinchado el botón y haz que el botón sólo sea creado si ese valor es menor al límite del número de resurrecciones permitidas.

colisión del personaje con la tubería:
if global.intentos<=global.intentos_max
   instance_create(a,b,obj_boton);


evento mouse left pressed del botón:
instance_create(c,d,obj_personaje);//o lo que sea que hagas para revivir al personaje
global.intentos+=1;
instance_destroy();


colisión de personaje con el suelo:
with obj_boton
    instance_destroy();


donde a,b y c,d son coordenadas que tienes que definir tú.
global.intentos es la variable que lleva la cuenta de los intentos
global.intentos_max es la variable que indica el número máximo de intentos

Sobre agregar un video, tendrás que buscar una extensión ya que con GML no se puede hacer.

Hola Guacusio, perdona que te moleste, pero me ha surgido un error, he puesto lo que tu me has dicho, y lo único que hace al tocar el botón es crear el pájaro, pero no revive, no se si necesitas algo mas, pero me he basado en esta base para hacer el juego: http://www.mediafire.com/download/mop3xn32l163na2/flappy+bird.gmx.zip

En mi juego no he modificado nada de el código, a ver si me puedes ayudar (si no es mucho pedir, claro :D )

Saludos.

#6 Septiembre 15, 2015, 05:05:57 AM Ultima modificación: Septiembre 15, 2015, 05:25:42 AM por Guacusio
No es molestia ayudarte, no te preocupes. Adapté el archivo que dejaste para agregar un botón de resurrección. Le agregué esto:

Evento colisión de obj_bird con obj_grass:
show_message("FIN DEL JUEGO");

eso fue para diferenciar una resurrección de un fin de juego

Evento colisión de obj_bird con obj_pipe_top:
while place_meeting(x,y,obj_pipe_top)
    x-=1;//mueve al pájaro a la izquierda hasta que no genere colisión
gravity=0.2;
vspeed=0;
if global.intentos<global.intentos_max
    instance_create(room_width/2,room_height/2,obj_revivir);


El pájaro debe ser desplazado hasta que no genere colisión con la tubería o se crearán instancias del botón revivir indefinidamente cuando sólo se requiere una. Le puse gravedad menor y velocidad cero para que cuando muera caiga lo suficientemente despacio como para darle tiempo al jugador de presionar el botón.

Evento game start de obj_bird:
global.intentos=0;
global.intentos_max=5;


Con eso inicializo las variables que llevan la cuenta de las resurrecciones. En este caso lo dejé con un máximo de 5 pero puedes poner lo que quieras.

Evento left pressed de obj_revivir (el botón):
global.intentos+=1;
room_restart();
instance_destroy();


Es una forma poco elegante de hacerlo pero te servirá como idea. También adjunto el editable para que lo pruebes.

EDIT: en el último código no es necesario utilizar instance_destroy()  :-[.


Cita de: Guacusio en Septiembre 15, 2015, 05:05:57 AM
No es molestia ayudarte, no te preocupes. Adapté el archivo que dejaste para agregar un botón de resurrección. Le agregué esto:

Evento colisión de obj_bird con obj_grass:
show_message("FIN DEL JUEGO");

eso fue para diferenciar una resurrección de un fin de juego

Evento colisión de obj_bird con obj_pipe_top:
while place_meeting(x,y,obj_pipe_top)
    x-=1;//mueve al pájaro a la izquierda hasta que no genere colisión
gravity=0.2;
vspeed=0;
if global.intentos<global.intentos_max
    instance_create(room_width/2,room_height/2,obj_revivir);


El pájaro debe ser desplazado hasta que no genere colisión con la tubería o se crearán instancias del botón revivir indefinidamente cuando sólo se requiere una. Le puse gravedad menor y velocidad cero para que cuando muera caiga lo suficientemente despacio como para darle tiempo al jugador de presionar el botón.

Evento game start de obj_bird:
global.intentos=0;
global.intentos_max=5;


Con eso inicializo las variables que llevan la cuenta de las resurrecciones. En este caso lo dejé con un máximo de 5 pero puedes poner lo que quieras.

Evento left pressed de obj_revivir (el botón):
global.intentos+=1;
room_restart();
instance_destroy();


Es una forma poco elegante de hacerlo pero te servirá como idea. También adjunto el editable para que lo pruebes.

EDIT: en el último código no es necesario utilizar instance_destroy()  :-[.

Muchas gracias por todo :D

PD:Hay alguna manera de añadir puntos, reputación o algo así?

Saludos.

Claro. El GMS  :GMS: Trae un sistema interno de puntuación, aunque no es muy bueno. Lo mejor es crear unas variables globales y mostrar la puntuación con un evento draw.

Saludos,
Cordialmente Jodidox!