Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Temas - KyraW

1
Hola a todos. Soy nuevo en la comunidad y bastante novato en lo que a Game Maker se refiere. Antes de nada, aclarar que este post es básicamente una petición de ayuda ante un problema que, a estas alturas, ya me está empezando a volver loco (llevo tres días, y he probado con todo). Gracias de antemano a todos los que se tomen la molestia de leerlo, y doblemente a los que contesten.

Actualmente me encuentro realizando el proyecto de fin de grado de Ingeniería Informática, que estoy realizando con Game Maker Studio (v1.3). La idea del proyecto es un juego de estrategia por turnos, al más puro estilo "advance wars". Esto es, mueves tus "fichas" (tanques, soldados, camiones...) en tu turno, y luego el oponente mueve las suyas. La parte más "académica", que voy a intentar vender, es la IA.

Para el terreno, he usado un sistema de objetos y tiles: En cada "cuadrado" de terreno hay un objeto con las características de ese terreno, que ocupa lo mismo que el tile que representa aunque es independiente de este. Para las unidades, objetos que generan un "menú" (otro objeto) cada vez que se pincha encima de ellas, y cuyas opciones dan lugar a varios eventos. Los movimientos de las fichas se manejan mediante colisiones entre los objetos de unidades y objetos de terreno.

Hace unas semanas tuve que hacer un alto en el proyecto por razones personales. Por aquel entonces, funcionaba perfectamente. Recientemente, sin embargo, ha empezado a fallar vilmente. Desde que lo volví a abrir, ha empezado a hacer cosas raras cuando lo inicio. Me carga los objetos (usando la ventana de "selected instance" del debugger, al seleccionar en donde deberían estar, efectivamente se muestra que ahí está el objeto), pero lo único que veo es una ventana de color verdoso oscuro (que entiendo es el background por defecto). Al alternar entre las distintas vistas (tengo dos, una para recorrer todo el mapa y otra para mostrar lo que vendría a ser el "minimapa"), el color se hace más claro, pero sigue sin verse nada.

Esto es lo que se debería ver:



Esto es lo que se ve:



Y al alternar a la vista "minimapa" (que no es otra cosa que escalar el mapa para que se vea entero en la ventana):



Algo que debería ser mencionado es el hecho de que la room, inicialmente, está vacía. En el juego tengo tres rooms distintas, a saber:


  • Load_Stage_Room: En esta room se inicializan todas las variables globales, y se lee uno de los archivos que contienen los diferentes niveles del juego. Por ahora no se toca nada del aspecto del juego. Es una room invisible, básicamente, que he creado para modularizar esta carga y, en un futuro, dar al usuario la posibilidad de elegir entre los distintos niveles del juego. Funciona correctamente, ya que carga los datos debidamente (comprobado con el debugger). Una vez carga todo, define las dimensiones de la siguiente room y pasa a esta.
  • Play_Stage_Room: La room principal, en donde se desarrolla el juego. Sus dimensiones se definen en la anterior room, y nada más cargarse genera un código mediante el cual crea todas las instancias necesarias, según los datos que leyó la room anterior. Por último, define las distintas vistas. Como entiendo que el problema probablemente se encuentra aquí, resumo el creation code abajo.
  • Save_Stage_Room: Room "fantasma" que he creado para generar los archivos que luego usa la primera room para cargar los datos. Defino gráficamente el nivel (es decir, coloco los objetos y tiles habitualmente) y luego, al ejecutarla, traduce todos esos datos a un archivo que se guarda en el lugar adecuado. En principio esta room nunca se utiliza en el juego, solo la uso yo cuando quiero crear un nuevo nivel.

El código de la Play_Stage_Room es más o menos lo que sigue. No lo copio tal cual para facilitar la lectura, pero no tengo ningún problema en hacer copy/paste literal si alguno cree que es mejor:

//INICIALIZAMOS LA MATRIZ PRINCIPAL

global.matrizChequeado1[0,0] = false;
global.matrizChequeado2[0,0] = false;

(Aquí vendría un bucle para inicializar las matrices del juego, que uso luego como soporte para la IA y algunos eventos)

(Bucle for que recorre todos los tiles que se deben cargar):
{
    instance = instance_create(global.loadedTilesX[i], global.loadedTilesY[i], Terreno_OBJ);
    instance.type = global.loadedTilesType[i];
    switch (instance.type)
    {
         (Dependiendo del tipo de terreno se le dan unos valores de cobertura predefinidos, que son variables internas de la instance)
    }
    global.matrizIds[global.loadedTilesX[i]/32,global.loadedTilesY[i]/32] = instance.id;
    tile_add(tileset,global.loadedTilesLeft[i],global.loadedTilesTop[i],global.loadedTilesWidth[i],
                global.loadedTilesHeight[i],global.loadedTilesX[i],global.loadedTilesY[i],100);
}
for (i = 0; i < array_length_1d(global.loadedUnidadesX); i++)
{   
    Crear_Unidad(global.loadedUnidadesType[i], global.loadedUnidadesX[i],
                global.loadedUnidadesY[i], global.loadedUnidadesBando[i]);
    (Esta última línea de código es un script que crea un tipo u otra de unidad según el tipo de esta)
}

//VISTAS

view_xview[0] = 0;
view_yview[0] = 0;
view_wview[0] = room_width;
view_hview[0] = room_height;
if (room_width > 640)
{
    view_wview[0] = 640;
}
if (room_height > 640)
{
    view_hview[0] = 640;
}
view_xport[0] = 0;
view_yport[0] = 0;
view_wport[0] = view_wview[0];
view_hport[0] = view_hview[0];
view_visible[0] = true;
instance_create(0,0,View0Controller);
view_enabled = true;
window_set_size(view_wport[0],view_hport[0]);
window_set_position(0,0);
view_xview[1] = 0;
view_yview[1] = 0;
view_wview[1] = room_width;
view_hview[1] = room_height;
view_xport[1] = view_xport[0];
view_yport[1] = view_yport[0];
view_wport[1] = view_wport[0];
view_hport[1] = view_hport[0];
view_visible[1] = false;
instance_create(0,0,View1Controller);


Las unidades son objetos que heredan de un objeto "Unidad_OBJ", el cual no tiene Sprite. Cada unidad va con su sprite definido, y tiene la opción "visible" marcada y las otras desmarcadas (no son sólidas, ni persistentes, ni usan físicas). Los terrenos son todos del mismo tipo, invisibles, y ocupan el mismo espacio que los tiles a los que representan (los cuales, por otro lado, tampoco se muestran).

Estoy empezando a pensar que el problema está en el propio Game Maker, y que lo más inteligente sería desinstalarlo y volverlo a instalar. Si a alguno se le ocurren posibles soluciones a este problema, me hacéis un hijo de madera. No tengo ningún problema en subir más partes de código o capturas si alguno cree que servirían para deducir cuál es el problema.

Gracias de nuevo.