Hola muchachos!! quisiera que me pudieran dar una manito.
estoy creando un objeto que simplemente pregunte:
"Salir y guardar juego?"
bueno les cuento, para esto estoy utilizando SHOW_QUESTION_ASYNC
de lo cual, al presionar SI se ejecuta la acción de salida, y si le pongo que NO el juego continua.
El error esta que al presionar por segunda vez el botón, se cierra solo el juego XD
porque puede estar pasando esto??
les dejo el código tal cual lo tengo para que lo analicen:
if(show_question_async("Desea salir del juego?"))
{game_end()};
else
{show_message_async("Continua jugando")};
Cita de: gameforever en Agosto 21, 2015, 10:59:54 PM
porque puede estar pasando esto??
Lo que falla es el código. Esa no es la manera en que se debe evaluar el resultado de una función asíncrona. Se tiene que usar un evento asíncrono y preguntar si la variable "
status" almacenada en el mapa async_load es verdadera o no. Ahí es donde se debe llamar a game_end()
http://docs.yoyogames.com/source/dadiospice/002_reference/asynchronous%20functions/show_question_async.html
[gml]
exit_question = show_question_async("Desea salir del juego?")
[/gml]
EVENTO ASÍNCRONO de diálogo
[gml]
var i_d;
i_d = ds_map_find_value(async_load, "id");
if (i_d == exit_question)
{
if ds_map_find_value(async_load, "status")
game_end()
}
[/gml]
;) perfecto ahora si funciona, estoy analizando el código para poder entenderlo mejor.
anteriormente utilizaba show_question ("y aqui escribia la interrogante");
pero al poner la opcion NO se quedaba pegado el telefono/tablet. y luego continuaba.
agregando el async, tanto para question como para show_message no me da ese problema.
Penumbra, sos grande!
podrías darme el link de algún juego que hayas creado para poder jugarlo?
otra cosa, me acaba de pasar que al pasar a la siguente room aparece esto
FATAL ERROR in
action number 1
of Web Event: Dialog
for object obj_guardar:
Push :: Execution Error - Variable Get -1.exit_question(100000, -1)
at gml_Object_obj_guardar_Other_63 (line 3) - if (i_d == exit_question)
porque sera?
en el evento "left pressed" puse el codigo=
exit_question = show_question_async("Desea salir del juego?")
y en evento "asynchronous",escogi "dialog" y puse esto=
var i_d;
i_d = ds_map_find_value(async_load, "id");
if (i_d == exit_question)
{
if ds_map_find_value(async_load, "status")
game_end()
}
El error es porque GM no reconoce la variable exit_question a la hora de evaluar la expresión (i_d == exit_question). Si esto pasa, me temo que es porque... ¿estás teniendo más de un objeto con evento asíncrono? ¿o estás mezclando eventos asíncronos de distintos objetos?
El evento asíncrono para la pregunta debe estar en el mismo objeto donde se haga exit_question = show_question_async("Desea salir del juego?") y de ser así no debería presentarse el error push. Este objeto debería ser un objeto controlador persistente y no debería borrarse nunca y sólo debería haber uno por habitación. El que el error ocurra al pasar de habitación, indica que estás manejando mal algún objeto, pero esto es más fácil de ver si pudiera echarle un ojo a tu proyecto.
¿En qué objeto estás usando el evento (y la función) asíncrono? Igual se puede intentar declarar la variable exit_question como global y quizás eso solucione el error, pero la verdad es que si se maneja correctamente, exit_question no tendría que ser global para que todo funcionara bien
PD: no tengo juegos completados, todos están en desarrollo :-X
Lo mas probable es que tengas toda la razon, porque estoy utilizando funciones async tambien en otro objeto,
en el boton que justamente sirve para cambiar de room, que es un objeto que tiene el evento left pressed y el codigo: show_message_async y claro, al presionarlo para cambiar de room, tira el fallo mencionado. Voy a revisar la explicacion dada, y ver que puedo hacer para solucionarlo pronto. Te cuento si me resulta, y espero termines luego tus proyectos para poder jugarlos ;)