Hace tiempo Simulatorone propuso y yo también lo comente, que se puedan crear funciones en gemix.
Ahora mismo las funciones de gemix son como las de div, osea, que no son funciones, son un segundo tipo de proceso, lo que interesa es poder crear funciones de verdad, y threads, con eso lo tienes solucionado.
Aunque eso tiene lagunas, por que sin un sistema de eventos.. de poco valen las funciones, ya que habría que tenerlas funcionando en un thread con un delay por timer para que no colapsen la cpu.
Es un tema delicado, a gemix le hacen falta mas cosas para poder hacer esto Shao.
Una solución bastante elegante y eficiente es tener un único proceso que haga de controlador de todos los eventos del juego, o por lo menos de todos los de cada etapa/parte del juego.
Yo la única forma que he encontrado que funcione rápido es mediante un switch así:
Ten en cuenta que en el programa donde se use hace falta una variable LOCAL llamada estado, entonces lanzas el gameController así:
ID_gameController = gameController();Y para destruirlo así:
ID_gameController.estado = -1;Yo uso siempre códigos como este:
process gameController();
// depende de la variable Global gameStatus..
// el programa debe tener una variable LOCAL llamada 'INT estdado'..
begin
SIGNAL_SET_BEHAVIOUR(ID, s_freeze, s_behaviour_ignore);
SIGNAL_SET_BEHAVIOUR(ID, s_kill, s_behaviour_ignore);
SIGNAL_SET_BEHAVIOUR(ID, s_kill_tree, s_behaviour_ignore);
switch(gameStatus)
case onMenu:
//...
end
case onPlaying:
//...
end
case onConfig:
//...
end
case onGameCredits:
//...
end
case onPause:
//...
end
end
// gameController destructor..
if(estado = -1)
break;
end
frame;
end
cada CASE tiene asignado una constante definida en la cabecera del programa, algo así:
const
onMenu = -1000;
onPlaying = -1001;
onConfig = -1002;
onGameCredits = -1003;
onPause = -1004;
Así te despreocupas de recordar valores numéricos, solo usas los nombres en todo el programa, quizá te sirva la idea..