Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: arcangelcaos en Enero 04, 2015, 12:23:57 PM

Título: Error no se donde en una lista ds_ (CERRARLO)
Publicado por: arcangelcaos en Enero 04, 2015, 12:23:57 PM
Haber, yo he pensado hacerlo asi, pero si me alumbráis de hacerlo de otra manera mejor. Mirar lo que estoy haciendo
Tengo un txt con el nombre de todos los objetos
Tengo un ini, con la cantidad de cada objeto

Quiero hacer como un libro, que me muestre en cada hoja unos objetos en función de la cantidad que tengo en el ini
Bien, he pensado este código al abrir la room
ini_open("Datos\CriaturasPosee.ini")
criaturas = file_text_open_read("Datos\CriaturasPosee.txt")
global.CriaturasCuartel = ds_list_create()
while not(file_text_eof(criaturas))
{
criatura= file_text_read_string(criaturas)
ncriatura= asset_get_index(criatura)
cantidad= ini_read_real('CriaturasPosee',criatura,0)
    if cantidad>0
    {
        repeat (cantidad)
        {
        ds_list_add(global.CriaturasCuartel,criatura)
        }
    }
file_text_readln(criaturas)       

global.TotalCriaturas = ds_list_size (global.CriaturasCuartel)
//ds_list_sort(CriaturasCuartel,1)
global.Paginas = ceil(global.TotalCriaturas/15)
global.pagina = 1
global.posicion =1
global.posicionrelativa =1
draw_text(735,80, "global.pagina" + "/" + "global.paginas")
    repeat (15)
        {
        global.posicionrelativa = global.posicion
        criatura= ds_list_find_value(global.CriaturasCuartel,global.posicionrelativa)
        ncriatura = asset_get_index(criatura)
        switch (global.posicion)
         {
         case 1:
         x1= 608
         y1=128 ;break
         case 2:
         x1= 608+128
         y1=128 ;break     
         case 3:
         x1= 608+252
         y1=128;break
         case 4:
         x1= 608
         y1=128+128;break
         case 5:
         x1= 608+128
         y1=128+128;break
         case 6:
         x1= 608+256
         y1=128+128;break
         case 7:
         x1= 608
         y1=128+256;break
         case 8:
         x1= 608+128
         y1=128+256;break
         case 9:
         x1= 608+256
         y1=128+256;break
         case 10:
         x1= 608
         y1=128+384;break
         case 11:
         x1= 608+128
         y1=128+384;break
         case 12:
         x1= 608+256
         y1=128+384;break
         case 13:
         x1= 608
         y1=128+512;break
         case 14:
         x1= 608+128
         y1=128+512;break
         case 15:
         x1= 608+256
         y1=128+512;break
         case 16:
         x1= 608
         y1=128+640;break
         case 17:
         x1= 608+128
         y1=128+640;break
         case 18:
         x1= 608+256
         y1=128+640;break
         }
         instancia= instance_create(x1,y1,ncriatura)
         if (global.TotalCriaturas = global.posicionrelativa)
         {
         break
         }
         global.posicion += 1
        }


el swicht lo uso poner cada objeto en un lugar correspondiente.

Ahora me he creado 2 botones, uno hacia atrás y otro hacia adelante, el de atrás en principio funciona una parte, la de si estoy en la pagina 1, pero no se el otro código dado que la de avanzar no funciona.
tengo este código
if not (global.pagina = global.Paginas)
    {
    global.posicion = 1
    i= global.pagina
    global.pagina +=1
    draw_text(735,80, "global.pagina" + "/" + "global.paginas")
    repeat (15)
        {
        global.posicionrelativa = global.posicion + (i*15)
        criatura= ds_list_find_value(global.CriaturasCuartel,global.posicionrelativa)
        ncriatura = asset_get_index(criatura)
        switch (global.posicion)
         {
         case 1:
         x1= 608
         y1=128 ;break
         case 2:
         x1= 608+128
         y1=128 ;break     
         case 3:
         x1= 608+252
         y1=128;break
         case 4:
         x1= 608
         y1=128+128;break
         case 5:
         x1= 608+128
         y1=128+128;break
         case 6:
         x1= 608+256
         y1=128+128;break
         case 7:
         x1= 608
         y1=128+256;break
         case 8:
         x1= 608+128
         y1=128+256;break
         case 9:
         x1= 608+256
         y1=128+256;break
         case 10:
         x1= 608
         y1=128+384;break
         case 11:
         x1= 608+128
         y1=128+384;break
         case 12:
         x1= 608+256
         y1=128+384;break
         case 13:
         x1= 608
         y1=128+512;break
         case 14:
         x1= 608+128
         y1=128+512;break
         case 15:
         x1= 608+256
         y1=128+512;break
         }
         instancia= instance_create(x1,y1,ncriatura)
         if (global.TotalCriaturas = global.posicionrelativa)
         {
         break
         }
         global.posicion += 1
        }
    }


He ido comprobando paso a paso lo que hace y mas o menos empieza bien, pero al llegar a cierta posición me da como ncriatura -1 en la posición 23, cuando en realidad hay mas criaturas, como 60 asi.
Puedo ver de una sola vez lo que hay en la lista? hay alguna función para verla en pantalla?
Donde puede estar el fallo? alguno lo ve?, y no se si los siguientes valores los hace bien porque no me deja continuar






Lo dejo por si a alguien le puede servir de inspiración para algo.
Faltaria añadir eliminiar todos los objetos antes de crear los nuevo en los eventos de las paginas.


El error era que había un espacio en la ultima línea del txt, no se veía, no se notava, pero hay estaba.

Tened cuidado de no dejar un espacio o línea en blanco al final del txt  :'( :'( :'( :'( :'( :'( :'( :'(