Abril 14, 2018, 04:31:21 PM Ultima modificación: Abril 22, 2018, 10:41:11 AM por Missy
Me gustaría saber cómo hacer para dividir en páginas los valores de una lista.

Creo una variable aparte y la llamo var
si la var = 1 ( Selección de los 4 primeras valores de la lista, o sea, de la 1 a la 4 )
si la var = 2 ( Selección de los siguientes 4 valores de la lista, o sea, de la 5 a la 8 )
etc...

Lo que pretendo hacer es que por cada 4 valores que tenga la lista, se sitúen en una página distinta, la página 1 tiene 4 valores , la página 2 las otras 4 valores que le siguen a la lista, etc...

#1 Abril 15, 2018, 09:54:51 PM Ultima modificación: Abril 16, 2018, 03:21:48 AM por Clamud
El nombre de la variable debe ser algo diferente a var, ya que var se usa para declarar variables temporales, mejor usa algo simple como
[gml]
pagina = 1;
[/gml]

Calcula el número de paginas
[gml]
numitems = ds_list_size(list);
numpags = ceil(numitems * 4);
[/gml]

Si los valores son texto, puedes dibujarlos de esta forma
[gml]
// Dibujar 4 items
index = (pagina - 1) * 4;
yy = y; //posición inicial
repeat(4)
{
    draw_text(x,yy, lista[|index]);
    index ++; //pasar al sig item
    yy += 15; //dibujar más abajo
   
    //si ya no hay más items, terminar ciclo
    if (index >= numitems) break;
}
[/gml]
Recuerda que en las listas los elementos se numeran desde el cero.
Edit: Corregí un error, para calcular index se necesita una multiplicación y había puesto una división.

Para cambiar de página puedes usar algo como esto
[gml]
// Ir a la pagina anterior
if keyboard_check_pressed(vk_left)
{
    if (pagina > 1) pagina --; //pagina anterior
    else pagina = numpags; //ultima pagina
}

// Ir a la pagina siguiente
if keyboard_check_pressed(vk_right)
{
    if (pagina < numpags) pagina ++; //pagina siguiente
    else pagina = 1; //primera pagina
}
[/gml]

¡Muchas gracias!

He corregido el código de cambiar la página porque habías puesto lo de la última página al presionar izquierda y lo de primera página en la derecha

///Para cambiar de página
// Ir a la página anterior
if keyboard_check_pressed(vk_left)
{
    if (pagina > 1) pagina --; //página anterior
    else pagina = 1; //primera página
}

// Ir a la página siguiente
if keyboard_check_pressed(vk_right)
{
    if (pagina < numpags) pagina ++; //página siguiente
}


Y luego modifiqué lo del número de páginas, en lugar de multiplicar lo cambié por una división

///Calcula el número de páginas
numitems = ds_list_size(listmail);
numpags = ceil(numitems / 4);