Lo que puedo decir, según mi insípida experiencia, estos errores son de lógica, no del GM. Digo, hay un 0.01% de Probabilidad de que sea un bug del GM y un 99.99% de que sea un error en el código que has escrito.

Sube tu archivo de GM y seguro damos con la solución

#16 Enero 31, 2014, 11:41:16 PM Ultima modificación: Enero 31, 2014, 11:50:35 PM por TLT96
Cita de: Jangse en Enero 31, 2014, 07:27:35 PM
Nada. Voy probando todos los códigos pero ninguno hace lo que busco. Y creo, que se puede deber que el GM no refresca la variable con el nuevo dato que le damos. O que pasa tan rápido que no llega a actualizarla. De hecho, ya comente, que el debugger de GM no actualiza el health a cero cuando la vida llega a cero también.

Es tan sencillo que al mostrar cero vidas, la energía muestre también cero. Osea, si muestra cero vidas y tenemos, por ejemplo 63% de energía, que el juego antes de reiniciar, nos muestre cero vidas y cero energía. Y luego reinicie. Y no haga como hasta ahora, que muestra en pantalla cero vidas y 63% de energía y reinicia. Y lo he probado todo. Creo que hasta me a aumentado la cabeza de tanto pensar... >:( :D

Pero que Diablos?!?!!?! Oye, en definitiva el problema es codigo tuyo o.O, te molestaria subir el editable? Ya he visto mil de cosas que podrian funcionar O.o.... No te sientas obligado pero..... Creo que nunca lo acomodaras tu solo, subelo y lo pones en el tema o se lo das a alguien en quien confies :3 (Es el problema mas simple sin haber tenido resultados o.O)

EDIT:
Cita de: penumbra en Enero 31, 2014, 10:08:11 PM
Lo que puedo decir, según mi insípida experiencia, estos errores son de lógica, no del GM. Digo, hay un 0.01% de Probabilidad de que sea un bug del GM y un 99.99% de que sea un error en el código que has escrito.

Sube tu archivo de GM y seguro damos con la solución
No vi el comentario xDD, bueh, es lo que dije ;P

#17 Febrero 01, 2014, 12:23:34 AM Ultima modificación: Febrero 01, 2014, 12:28:48 AM por vampy09
Comparto la opinion de los compañeros: debe haber un error en la logica de tu codigo, que en el GM se traduce en que Eventos  pones las acciones.
Sube tal vez un editable sin sprites, ni backgrounds etc, solo lo necesario para que podamos ayudarte. Por que lo que tu deseas hacer en tu juego es posible.
Saludos !
The next best thing to knowing something,
is knowing where to find it.

#18 Febrero 01, 2014, 10:46:18 AM Ultima modificación: Febrero 12, 2014, 07:27:40 PM por Jangse
Cita de: penumbra en Enero 31, 2014, 10:08:11 PM
Lo que puedo decir, según mi insípida experiencia, estos errores son de lógica, no del GM. Digo, hay un 0.01% de Probabilidad de que sea un bug del GM y un 99.99% de que sea un error en el código que has escrito.

Sube tu archivo de GM y seguro damos con la solución

Sí, no hay ningún problema. Si no lo he subido antes, no ha sido por miedo a que alguien copie el juego. De hecho, no deja de ser un borrador o prueba para ir aprendiendo las funciones y programación con GML. Y creo que hacer un juego de laberintos es idóneo para eso.

Es solamente el primer nivel y al pasarlo te enfrentas al boss o jefe de turno. El gráfico del jefe si lo he quitado por que me lo ha dibujado otra persona. En su lugar he puesto un gif de un sprite sheet. Cuando eliminas al jefe, no pasa nada por que no esta hecho el otro nivel.

Seguro que tendrá muchos fallos, al margen del que estoy comentando en este post. Pero el que mas me interesa ahora, es lo de lives y health.

También podéis comprobar que si os quedáis tres veces sin energía, el juego se acaba y en cambio marca una vida.
Y si os quedáis con cero vidas, puede ser que aún marque que tenéis energía. Que es lo que me da rabia.

Quiero, que cuando salga el show_message con game over, abajo marque 0 vidas 0 energía.

TECLADO:

Teclas cursor: Movimientos del personaje.
Barra espaciadora: Disparo.



#19 Febrero 01, 2014, 08:26:01 PM Ultima modificación: Febrero 01, 2014, 08:31:01 PM por penumbra
Listo. Lo que hacías primero era que cuando la salud llegaba a cero, se reiniciaba a 100 y restabas una vida
if (health == 0)  {
    health = 100;
    lives -= 1;
    }


Luego revisabas si el número de vidas era cero, para poner la salud también en cero, terminarr el juego y mostrar mensaje
if (lives == 0) {
    health = 0;
    show_message('Game Over');
    game_restart();
    }
       

No sabía que esto pasaba, pero me da la impresión ( a menos que otra cosa pase y yo lo ignore) que en cuanto terminas el juego, el evento DRAW no lee ya el valor de la variable health, que sí cambia en STEP a cero. El evento DRAW se ejecuta después que STEP, pero yo moví el código de terminar el juego a DRAW y hacía lo mismo, seguía mostrando el valor de healt mayor a cero. Se me hace normal no saber esto ya que hasta ahora en mi proyecto nunca he usado las funciones que terminan/reinician el juego  XD

Lo que hice fue editar un poco los IF que ajustan energía y vida. Y SOBRE TODO, mover el bloque que termina el juego ANTES del bloque que revisa vidas, para que si en STEP las vidas se acaban, dar oportunidad que se ejecute DRAW y esperar hasta el otro STEP para revisar que las vidas son cero y terminar el juego

Al principio de STEP

if (!health) and (!lives)                         //Si vidas y salud son cero
{
    show_message('Game Over');
    game_restart();
}



Al final de STEP
if (lives >= 1)               //Si tienes al menos una vida...
{
    if (health < 1)                   //... y se te acaba la salud                   
    {
        lives -= 1;
        health = 100;               //Quitar una vida y reiniciar la salud
    }
}
else   
    health = 0;                      // Si ya no te quedan vidas, la salud se acaba


Antes tenías healt = 0 en el bloque que terminaba el juego, eso hacía que nunca cambiara la energía a cero en DRAW, por eso lo saqué y lo puse en el último IF-ELSE



#20 Febrero 01, 2014, 08:43:12 PM Ultima modificación: Febrero 01, 2014, 08:44:45 PM por Jangse
penumbra, muchas gracias por tomarte la molestia de mirar el código. En parte funciona. Pero si te fijas, la energía nunca llega a cero. Me refiero cuando te tocan esas serpientes verdes. Se queda en 1 y ya no descuenta mas vidas. De todas formas, ahora me mirare bien tus correcciones y voy a ver si puedo solucionar eso  :)

#21 Febrero 01, 2014, 08:48:04 PM Ultima modificación: Febrero 01, 2014, 08:50:42 PM por penumbra
En el objeto Héroe, en la colisión contra las serpientes, agregué una condición extra al IF mientras trasteaba con tu código, quita esa condición extra y listo

if (invencible == false) and (obj_Control.health > 1)

lo cambias a

if (invencible == false)

se me había olvidado   :-[ Lo acabo de probar y funciona, las serpientes me mataron por completo

Cita de: penumbra en Febrero 01, 2014, 08:48:04 PM
En el objeto Héroe, en la colisión contra las serpientes, agregué una condición extra al IF mientras trasteaba con tu código, quita esa condición extra y listo

if (invencible == false) and (obj_Control.health > 1)

lo cambias a

if (invencible == false)

se me había olvidado   :-[ Lo acabo de probar y funciona, las serpientes me mataron por completo


¡¡¡ POR FIN !!!  :D Ahora esto si funciona al 100%. Muchas gracias de nuevo por tu ayuda.

Yo pensaba que dentro del step se podría poner el código en el orden que quisiéramos. Pero veo que no. Ahora me estudiare bien el código para encontrar su lógica.

Tampoco conocía que esta expresión !health era lo mismo a poner health == 0.

Y un apunte mas...en este código tuyo pones al obj_Control delante de la variable. Pero no es necesario ¿Verdad? Por que son variables del propio GM ¿No?

if (obj_Control.lives >= 1)
{
    if (obj_Control.health < 1)
    {
        obj_Control.lives -= 1;
        obj_Control.health = 100;
    }
}
else   
    obj_Control.health = 0;


Bueno, un saludo. Ya posteare el juego cuando lo tenga acabado. Aunque me queda un mundo para aprender...jejeje.

#23 Febrero 01, 2014, 09:11:43 PM Ultima modificación: Febrero 01, 2014, 09:15:56 PM por penumbra
De nada, es bueno saber que ya funciona.

Cita de: Jangse en Febrero 01, 2014, 09:00:21 PM
Tampoco conocía que esta expresión !health era lo mismo a poner health == 0.

!algo es una de mis expresiones favoritas, pero para mi sorpresa...

He hecho pruebas en GM:S y ahora no me deja usar !health, sino que forzosamente tengo que usar (healt == 0). Escribo esto como aviso o por si a alguien sí le funciona me diga cómo.   >:(

Y sí, todo afecta en STEP, todo está "vivo". Si cambias una variable y más adelante, en el mismo evento hay decisiones basadas en su valor, el cambio les afecta

#24 Febrero 02, 2014, 02:23:30 AM Ultima modificación: Febrero 02, 2014, 02:39:01 AM por vampy09
Ampliando la respuesta de penumbra
El problema era que tu codigo siempre mostraba algun valor en la parte de ENERGIA cuando la caja de texto GAME OVER aparecia.
Error se daba en esta parte del codigo:

else
       {
         show_message("Game Over");
         restart_game();
        }
Osea "congelar" (freeze) el juego mientras que se muestre la caja de texto con el texto
"GAME OVER" hasta que se presione el boton OK de la caja de texto, cuando esto suceda( cklick en Ok) debe reiniciar el juego.
Entonces? ... Bueno que no estamos "dejando" que el GM muestre los valores que este paso le esta asignando a las variables health y lives, porque congelamos el juego y inmediatamente despues reiniciamos el juego.
El reiniciar el juego, evitaba que el evento DRAW (que va algo despues de ENDSTEP) dibuje en la pantalla el nuevo valor de health.
Por cierto me gusta mucho el efecto de "scalines" que aplicas al juego.
Saludos !
The next best thing to knowing something,
is knowing where to find it.

#25 Febrero 02, 2014, 03:08:31 AM Ultima modificación: Febrero 02, 2014, 03:23:28 AM por vampy09
obj_Control.lives = 1;
Significa que a la variable lives del obj_Control se le va ha asignar el valor de 1
El punto indica a que objeto se va aplicar la funcion o en este caso la modificacion de la variable lives, osea el punto indica que lo que esta del lado derecho del punto se le va ha aplicar a lo que este del lado izquierdo. 
Esto permite realizar cambios a variables, llamar funciones, comparar el valor de una variable etc. de un objeto dentro de otro. Es como un control remoto.
Es lo mismo que cuando usas Drag n Drop y de las tres opciones: self,other,object, seleccionaras object, luego sale un menu en el que debes escojer el objeto al que deseas que se le aplique la accion.
Se le conoce como operador selector de miembro/instancia
The next best thing to knowing something,
is knowing where to find it.

Cita de: vampy09 en Febrero 02, 2014, 03:08:31 AM
obj_Control.lives = 1;
Significa que a la variable lives del obj_Control se le va ha asignar el valor de 1


Bueno, yo a lo que me refiero es que sin poner delante de la variable lives el obj_control el código me funciona igual. Ya que tanto lives, health, score son tratadas por game maker como variables globales. Y en el step de nuestro personaje pongo así el código y me funciona perfectamente.

Cita de: vampy09
Osea "congelar" (freeze) el juego mientras que se muestre la caja de texto con el texto
"GAME OVER" hasta que se presione el boton OK de la caja de texto, cuando esto suceda( cklick en Ok) debe reiniciar el juego.

Sí, en post anteriores ya comenté que algo de esto podía suceder. Es decir, que no le diéramos tiempo al código para actualizar la variable.

Cita de: vampy09
El reiniciar el juego, evitaba que el evento DRAW (que va algo despues de ENDSTEP) dibuje en la pantalla el nuevo valor de health.
Esto es algo que debo aprender. Osea, ver la lógica de los Begin step, step y end step. Pero yo, en mi juego, no tengo definido ningún evento end step. Solo step a secas.

Cita de: vampy09Por cierto me gusta mucho el efecto de "scalines" que aplicas al juego.
Saludos !

Gracias. Me gustan los juegos con ese ambiente retro. Osea, que no se muestren con colores demasiado planos. Aunque no me gusta al 100% como queda. Ya trataré de mejorarlo. Ahora prefiero empaparme de código. El apartado gráfico lo encuentro mas sencillo.

Saludos!

#28 Febrero 02, 2014, 07:33:36 PM Ultima modificación: Febrero 02, 2014, 07:47:09 PM por vampy09
Cita de: Jangse en Febrero 02, 2014, 12:25:36 PM
Cita de: vampy09 en Febrero 02, 2014, 03:08:31 AM
obj_Control.lives = 1;
Significa que a la variable lives del obj_Control se le va ha asignar el valor de 1


Bueno, yo a lo que me refiero es que sin poner delante de la variable lives el obj_control el código me funciona igual. Ya que tanto lives, health, score son tratadas por game maker como variables globales. Y en el step de nuestro personaje pongo así el código y me funciona perfectamente.

No es que no entiendas como se usa el "." sino que utilizarlo con varibles como health o lives o en tu codigo es redundante. Tienes toda la razon! Disculpa es que aveces no leo con cuidado. :-P
Con respecto al los graficos, siendo sincero para mi es la primera vez que en juego de GM que veo este efecto. Se y entiendo que tu juego esta en una etapa beta y mucho del juego puede llegar a cambiar, pero en humilde mi opinion, esta efecto aporta mucha personalidad a los graficos y logra la sensacion de un arcade retro.
Saludos
The next best thing to knowing something,
is knowing where to find it.

Man soy nuevo en game maker pero lo que yo aria seria al comienzo del juego crear una variable "Vidas" (ya que no conoso si GM biene con una variable predefinida para saber cuantas vidas tiene el pj) entonces cada vez que el personaje pierda una vida ademas tienes que agregar el evento de set var con el nombre vidas y -1 relativo, de esta forma se restara 1 vida a lo que ya tienes, ademas creas un objet que estara siempre en el juego con un test variable en el event step para comprobar si "Vidas" es igual a 0, si esto es haci pues agregas el codigo o action correspondiente para setear la energia a 0