Hola Buenas Soy NeptUranus597

PD: este solo estará en  :GM8: para después exportarlo a  :GMS:

y vengo con dudas sobre como hacer un inventario. por ahora solo tengo la base para seleccionar el puntero ahora solo me falta agregar objetos para hacer que el inventario para que se vea bien
si alguien me quiere ayudar en el sistema de inventario le agradecería mucho y le daría crédito por la ayuda

aquí el gmk (ojala me ayuden con este sistema)

Saludos!
Bajé el editable y lo miré un poco. El problema que tiene es que solamente está almacenando el valor en una única variable.
Lo cual no sirve de mucho, aunque visualmente, si, cumple con parecerse a lo que es un menú de selección. No serviría de mucho, el hecho de que la variable guarde un valor del 1 al 9, puesto que necesitaríamos saber qué item se aloja en cada lugar.

Una variable común como la que estás utilizando, en este caso llamada "Select" es una variable que puede almacenar un único valor a la vez.
Deberías usar un array(también llamados arreglos, vectores o listas) lo que sería más sencillo de hacer, que si tuvieras por ejemplo 9 o 10 variables para guardar un item en cada espacio.
Se entiende por un array, a una variable que es capaz de almacenar varios valores simultaneamente.

Un ejemplo práctico usal es hacer uso de una variable de este tipo para guardar los meses del año. En Game maker tendríamos la estructura como:
[gml]
mes[1] = "enero";
mes[2] = "febrero"
mes[3] = "marzo"
mes[4] = "abril"
mes[5] = "mayo"
mes[6] = "junio"
mes[7] = "julio"
mes[8] = "agosto"
mes[9] = "septiembre"
mes[10] = "octubre"
mes[11] = "noviembre"
mes[12] = "diciembre"
[/gml]
Como puedes notar, a diferencia de una variable común a la que solo se le asigna un nombre, como "Select", la variable de tipo array, tiene llaves cuadradas "[" y "]", lo cual indica que es una variable capaz de almacenar varios valores al mismo tiempo.
También como puedes notar, la variable lleva consigo, un numero, en este caso va del 1 al 12, lo cuál indica la posición o lugar de un determinado valor dentro de nuestro array.

Si mostrásemos un mensaje, queriendo ver el mes que está dentro de la posicion 3, haríamos en GML:
[gml]
draw_text(0, 0, string( mes[3]);
[/gml]
Lo cuál mostraría al mes de "Marzo" en pantalla.

Para mostrar, toda la información en pantall,a como has de suponer, se tiene que recorrer la lista entera para poder mostrarla, por ejemplo:

[gml]
draw_text(0, 20, string( mes[1]);
draw_text(0, 40, string( mes[2]);
draw_text(0, 60, string( mes[3]);
// ... y asi en lo sucesivo hasta
draw_text(0, 240, string( mes[12]);
[/gml]
Lo cual mostraría los valores uno, debajo de otro, enseñando en pantalla así los 12 meses del año. Como puedes notar, nuevamente, se usa un número que acompaña a la variable "mes" , para determinar qué valor mostraremos. Ese número que acompaña se llama usualmente "índice" (o posicion, lugar o del inglés, "index"). Entonces para nuestro ejemplo del mes de Marzo, la variable mes[3], tiene el indice tres.

Extrapolando la explicación a tu sistema de inventario. Estaría bien ponerle un nombre adecuado, por ejemplo:
[gml]
inventario[1] = ""
inventario[2] = ""
inventario[3] = ""
inventario[4] = ""
inventario[5] = ""
inventario[6] = ""
inventario[7] = ""
inventario[8] = ""
inventario[9] = ""
[/gml]
Ahora hemos creado la variable "inventario" con  9 lugares disponibles para valores. Es decir, "inventario" ahora puede almacenar simultáneamente 9 diferentes valores. Nosotros colocamos comillas vacías ("") para indicar que el inventario está vacío.
Pero en la práctica podemos asignar cualquier valor que nos convenga, por ejemplo:  inventario[4] = "pocion magica".

Hay maneras más automatizadas de crear, y mostrar un array, pero eso ya depende de cuán familiarizado estés con el uso de ciclos no condicionados (o ciclo for).

Pero bien, ahí tu me dices las dudas que tengas, así explayamos más aún el tema.



imagen 1: bueno yo llegue a esta parte

ademas quiero saber como se ase este efecto

vea la imagen 2.

me puede explicar que códigos tengo que agregar para que haga ese efecto como de vaciamiento?

Gracias por tomar en consideración mi recomendación de explicarte con muchos detalles, así es mejor para entender el problema de raíz y no da lugar a confusiones XD

Bueno, lo que quieres hacer es eliminar un elemento, o pisarlo.
El caso es simple, se trata de posicionarse en una posición dada e ir pisando las posiciones con los valores subsecuentes. Esto en chino, quiere decir, que si yo tengo una lista por ejemplo:


pocimadiamantemanzanabananamoneda
Todo depende desde donde se quiera ir pisando los elementos, lo cual sería la posición llamada "P" o bien, el elemento que se quiere eliminar, estaría en la posicion "P".
En mi ejemplo usaré P= 3, que sería el elemento "manzana".

Lo que hará el algoritmo será entonces, ir copiando los elementos después de la posición P (que es 3), lo que hará es ir pisando los de manera que se vayan moviendo y la lista, en consecuencia se vaya vaciando.

Entonces, si yo comienzo en la posición 3, tendría que copiar el elemento de la posición siguiente, que sería el numero 4. Lo cual me daría la siguiente lista:


pocimadiamantebananabananamoneda
Como se puede notar, tenemos dos elementos repetidos, pero eso no importa realmente porque seguiremos pisando los elementos hasta que se termine la lista. Entonces ahora que tenemos el indice en la posición 4, tendríamos que copiar el siguiente elemento, es decir, copiar en inventario[4] el item que esta en la posicion siguiente. Lo que sería a grandes rasgos hacer: inventario[4] = inventario[5].
Entonces tendríamos la lista como sigue:


pocimadiamantebananamonedamoneda
Ahora, que tenemos fuera de la lista el elemento, tenemos que vaciar el elemento repetido que será siempre el último de la lista puesto que, todos los elementos se movieron hasta la posición P.
Entonces, para finalizar deberíamos hacer: inventario[5] = ""
Lo cual vaciaría el último elemento, y nos quedaría la lista, sin el elemento que habíamos seleccionado.


pocimadiamantebananamoneda
En esta lista idealizada suponemos que el inventario es de 5 elementos, pero luego lo haré para 9 elementos como habíamos acordado al incio.

Bien, luego de tanto tutorial XD vamos a ver el código. Primero que nada, deberías tener declarada una variable que indique la posición donde se sitúa el cursor para poder utilizar el elemento. Nosotros podríamos reutilizar la variable "Select" la cual nos indicaría la posición del cursor dentro del inventario para, justamente borrar ese elemento. (que entiendo que no se borra, sino que el jugador lo utiliza convenientemente).
Entonces, en el evento create donde declaramos nuestro arreglo, tendríamos la variable, "Select", y adicionalmente declararemos dos variables, que nos servirán para mantener al arreglo dentro de los limites de su tamaño, las cuales declararé como MIN y MAX, para saber cuando el vector está en la última posición y cuando está en la primera.
[gml]
inventario[1] = ""
inventario[2] = ""
inventario[3] = ""
inventario[4] = ""
inventario[5] = ""
inventario[6] = ""
inventario[7] = ""
inventario[8] = ""
inventario[9] = ""

select = 1; // variable para saber donde se ubica nuestro cursor dentro del inventario
MIN = 1; // variable para indicar que tan pequeña es nuestra lista
MAX = 9 //variable par indicar que tan grande es nuestra lista
[/gml]

Ahora para hacer el borrado de un item, pondré como supuesto el evento TECLA ENTER, donde dentro tendríamos el siguiente código:
[gml]
var i ;//iterador de la lista
var pos; //posicion donde se encuentra el elemento que queremos borrar

pos = Select; // "pos" es el lugar, donde esta situado nuestro cursor actualmente.

for(i=pos; i<MAX; i++){ //el ciclo comienza en la posicion "pos" para ir copiando todos los elementos siguientes
       inventario = inventario[i+1]; //el elemento actual copiará el que está al siguiente. Es decir, si estamos en 3 copiara a 4, si estamos en 4 copiará a 5
}//el ciclo no opera fuera de esta llave

inventario[MAX] = ""; // eliminamos el elemento repetido, que es siempre el último en la lista.
[/gml]
Lo que hace el código, es lo que se explicó antes. Se posiciona en el lugar donde esta el cursor y va copiando los elementos de la lista uno a uno, con el siguiente que tenga al lado. Finalmente nos queda un elemento repetido que lo eliminamos con la instrucción inventario[MAX] = "";

En un principio el código debiera funcionar XD es una re-implementación que usaba en lenguaje C. Pero no sé a ciencia cierta si GameMaker tendrá algún problema diferente en cuanto a sintaxis.

Saludos!

Vale Gracias. ahora ya lo aplique al proyecto ahora encontre 3 bugs donde

Bug 1: Los objetos no bajan hacia a abajo cuando se genera uno
Bug 2: el puntero se desaparece cuando presiono arriba cuando estoy en Min=1 o Max=9
Bug 3: cuando paso del objeto del Maximo Objeto que hay No se para si no sigue para adelante.

Agregado 1: puedes intentar a hacer de que al agregar un objeto se rellene el inventario hasta el maximo numero que es 9?

Estaría bien, si pusieras los códigos, sino no puedo saber qué está fallando XD
O el editable, lo que más te acomode.


bueno te paso el editable haber si puedes pasarme los codigos para solucionar los problemas

Claro, lo que ocurre es que no estás verificando los límites cuando te desplazas con arriba y abajo.

[gml]
if keyboard_check_pressed(vk_up){
    if (Select > MIN)
        Select -= 1;
    else
        Select = MIN;
}

if keyboard_check_pressed(vk_down){
    if (Select < MAX)
        Select += 1;
    else
        Select = MIN;
}
[/gml]
El código correcto quedaría como luce ahí, se verifica si está en el borde superior, si es así se acota hasta el último item, que sería en realidad el máximo elemento en la lista. Para cuando el elemento va más allá del tamaño de la lista, hace lo contrario, es decir, el cursor aparece al inicio de la lista.
Eso solucionaría todos los problemas respecto a que desaparece el menú.

CitarAgregado 1: puedes intentar a hacer de que al agregar un objeto se rellene el inventario hasta el maximo numero que es 9?
El proceso es parecido lógicamente, al anterior. Solo que en vez de pisar los elementos siguientes, lo que se hace es ir copiando en el siguiente elemento, el elemento anterior. Básicamente lo que tienes que hacer es usar el ciclo en reversa e ir copiando los elementos en reversa para dejar "pos" con un elemento repetido, que luego sería remplazado por el nuevo item.
Ahora no puedo escribirte el código, pero estaría bueno que lo plantearas ya si no te sale, vemos.