Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: El orden de instancia de los objetos se invierte [Solucionado]  (Leído 367 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Marth

Veran, tengo un SRPG en el que tengo que almacenar los datos de mis unidades.
Este es el código al guardar la partida:

global.j=file_text_open_write("aliados.pmd")
with(Esperador){
   file_text_write_real(global.j,profesion.object_index) // Rol de la unidad.

   file_text_write_real(global.j,defensa) // Afinidad elemental.
   for(global.t=0; global.t<3; global.t++){
      file_text_write_real(global.j,credef[global.t]) // Crecimiento de estadisticas de defensas.
      file_text_write_real(global.j,def[global.t]) // Defensas elementales.
   }

   file_text_write_real(global.j,nivel) // Nivel de la unidad.
   file_text_write_real(global.j,experiencia) // Experencia acumulada.
   file_text_write_string(global.j,nombre) // Nombre de la unidad.
}
file_text_close(global.j)


Y cuando cargo, uso este código:

global.j=file_text_open_read("aliados.pmd")
repeat(global.total){
   global.w=instance_create_depth(0,0,0,Esperador)
   with(global.w){
      profesion=file_text_read_real(global.j)

      defensa=file_text_read_real(global.j)
      for(global.t=0; global.t<3; global.t++){
         credef[global.t]=file_text_read_real(global.j)
         def[global.t]=file_text_read_real(global.j)
      }

      nivel=file_text_read_real(global.j)
      experiencia=file_text_read_real(global.j)
      nombre=file_text_read_string(global.j)
   }
}
file_text_close(global.j)


Gracias a esto, logro que los datos de las unidades se almacenen en un fichero.
Pero ocurre un extraño error.
Cuando guardo, las unidades se almacenan en un determinado orden. Y cuando cargo, en ese mismo orden se crean las unidades.
Pero GM les da un orden de instancia inverso al que deberian tener, lo que hace que el orden de colocación de las unidades se invierta, tal como muestro en las capturas de pantalla.

La cosa es como soluciono esto.
Se me ocurre que podria hacer que cuando se lean los ficheros, se haga del reves, para que así cuando se invierta el orden, al invertirse 2 veces, se quede en el orden correcto.
« última modificación: Septiembre 11, 2019, 09:53:53 pm por Marth »

Si piensas que los usuarios de tus programas son idiotas, sólo los idiotas usarán tus programas.

-Linus Torvalds ("Padre" de Linux)-
 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado 3dgeminis

Respuesta #1 en: Septiembre 09, 2019, 08:37:48 pm
A lo mejor sea una idea tonta pero prueba a cargar los datos alreves, empieza por nombre y termina por profesion.

 


Desconectado Marth

Respuesta #2 en: Septiembre 11, 2019, 09:53:06 pm
Ya lo he resuelto.
He usado este código:

repeat(global.total) // Empezamos creando las unidades.
   global.w=instance_create_depth(0,0,0,Esperador)

global.j=file_text_open_read("aliados.pmd")
with(Esperador){ // Y ahora les damos sus valores.
   profesion=file_text_read_real(global.j)
   global.azul=file_text_read_real(global.j)
   if(global.azul==255)
      global.activos++ // Los objetos empiezan ya en c_white.
   else
      image_blend=c_gray // Al fin y al cabo, el blend solo puede ser blanco o gris.

   defensa=file_text_read_real(global.j)
   for(global.t=0; global.t<3; global.t++){
      credef[global.t]=file_text_read_real(global.j)
      def[global.t]=file_text_read_real(global.j)
   }

   nivel=file_text_read_real(global.j)
   experiencia=file_text_read_real(global.j)
   nombre=string_delete(file_text_read_string(global.j),1,1) // Un bug añade un espacio al inicio de la cadena. Esto lo deberia solucionar.
   PS=heroe*nivel // La resistencia de los barcos se recuperan con una sencilla formula. El objeto Seguir les dara los ps totales.
   req()
}
file_text_close(global.j)


Primero se crean los objetos, que tendran su orden invertido.
Y luego se introducen los datos a cada objeto, estando ya colocados en un orden determinado.
Esto hace que los objetos esten en el orden correcto.

Si piensas que los usuarios de tus programas son idiotas, sólo los idiotas usarán tus programas.

-Linus Torvalds ("Padre" de Linux)-