Hola a todos,

Quiero preguntar una cosa a ver si alguien puede explicarme como puedo hacerlo (si es que se puede hacer, que no lo tengo nada claro):

El problema es el siguiente:

¿Como puedo obtener usando código una lista de instancias de un determinado objeto que se encuentra en la Room?, esta lista tendría que contener la lista de instancias de un determinado objeto y sus respectivas ubicaciones para posteriormente poder trabajar con ellas con código.

Gracias y saludos.



#1 Enero 13, 2014, 10:43:21 PM Ultima modificación: Enero 13, 2014, 10:49:30 PM por penumbra
pila_id = ds_stack_create();     


with(mi_objeto)
{
    ds_stack_push(pila_id, id);
}

Buenas, el código de penumbra tiene algún pequeño fallo, pero la base está bien.

Corregido quedaría así:


n = instance_number(mi_objeto)
with(mi_objeto)
{
for (i=1; i <= n; i+=1)
     {
          global.arreglo_id[i] = id                //Guarda la id de la instancia del objeto "mi_objeto" en la posición "i" del arreglo "arreglo_id"
      }
}


La variable arreglo_id tenía que ser global para poder acceder a ella desde fuera, faltaba el índice "i" (ya que si no ya no haría de lista porque solo guardaría 1 elemento), el objeto en el que usas instance_number ha de ser el mismo que el que pones dentro del width, y el índice i debe empezar en 1 (si no habría un objeto de más, por ejemplo si hay 1 instancia del objeto, saldrían dos índices, el 0 y el 1, sin embargo sólo habría 1 instancia).


Saludos.

PD: Penumbra espero no haber quedado como un repelente corrigiéndote xD

#3 Enero 13, 2014, 11:03:28 PM Ultima modificación: Enero 13, 2014, 11:06:59 PM por penumbra



La variable arreglo puede o no ser global, se puede acceder a ella de todas maneras mediante el ".",  también pude haber puesto "var i", pero esos detalles los puede manejar el makero Strod. De hecho no especifiqué que

n = instance_number(mi_objeto)

sería mejor ponerla dentro de un IF para que no se ejecute paso a paso



Al final cambié el código por algo más limpio y creo más eficiente

#4 Enero 14, 2014, 06:29:44 PM Ultima modificación: Enero 14, 2014, 08:03:52 PM por Strod
Muchas gracias chicos, voy a ponerme a ver lo que me habeis escrito y a ver si logro aplicarlo con éxito, ya os comento más tarde como termina la cosa, aunque con lo lento que soy y el limitado tiempo que tengo a saber lo que tardo.

edit: una pregunta, como puedo obtener una a una las id que se van apilando en ds_stack_push(pila_id, id); , es la primera vez que uso pilas y estoy un poco perdido.

Por otro lado el método de Mega G me es comprensible y fácil de entender, pero como Penumbra ha dicho que el suyo es más eficiente (entiendo que necesita menos cálculos para llevarse a cabo) estoy interesado en ver como se maneja.

Saludos y gracias de nuevo.

nuevo = ds_stack_pop(pila_id)


"Saca" el valor que está en la parte más alta de la pila y lo elimina de la misma (y lo guarda en "nuevo"). O para guardar todos los valores en un arreglo



While (ds_stack_size(pila_id) > 0)
{
      mi_arreglo[c] = ds_stack_pop(pila_id)
      c += 1
}


No hace mucho que comencé a usar estructuturas de datos, son muy útiles.

#6 Enero 16, 2014, 06:24:38 PM Ultima modificación: Enero 16, 2014, 07:53:19 PM por Strod
Muchas gracias penumbra, voy al lio.   :-[

Edit: bueno pues las pilas tendrán que esperar, esperaba terminar con el método de Mega G y me he encontrado con un problema inesperado:

Como comenté antes lo que quiero es saber las ID de un determinado objeto que hay en ese momento en la Room. He aplicado el código de Mega G y a la hora de mostrar las ID en pantalla uso lo siguiente en el evento Draw porque quiero ver listadas las IDs en pantalla.

var j;
for (j=1; j<=n; j+=1)
   
    {
        draw_text(x,y+j*10, string(global.arreglo_id[ j ]))
    }


Y me sale el siguiente error: "Unknown variable arreglo_id or array index out of bounds", variable desconocida no es porque le indico bien a que objeto pertenece mediante el uso del punto precedido con el nombre del objeto.

Así que no me sale en pantalla la lista de IDs de ese objeto.No sabía que escribir en pantalla los valores de un array fuese tan complicado.


Disculpad el coñazo que estoy dando  :-[, pero es que el único sitio que puedo preguntar.

Saludos.



Cita de: Strod en Enero 16, 2014, 06:24:38 PM
Muchas gracias penumbra, voy al lio.   :-[

Edit: bueno pues las pilas tendrán que esperar, esperaba terminar con el método de Mega G y me he encontrado con un problema inesperado:

Como comenté antes lo que quiero es saber las ID de un determinado objeto que hay en ese momento en la Room. He aplicado el código de Mega G y a la hora de mostrar las ID en pantalla uso lo siguiente en el evento Draw porque quiero ver listadas las IDs en pantalla.

var j;
for (j=1; j<=n; j+=1)
   
    {
        draw_text(x,y+j*10, string(global.arreglo_id[ j ]))
    }


Y me sale el siguiente error: "Unknown variable arreglo_id or array index out of bounds", variable desconocida no es porque le indico bien a que objeto pertenece mediante el uso del punto precedido con el nombre del objeto.

Así que no me sale en pantalla la lista de IDs de ese objeto.No sabía que escribir en pantalla los valores de un array fuese tan complicado.


Disculpad el coñazo que estoy dando  :-[, pero es que el único sitio que puedo preguntar.

Saludos.

Gracias por usar mi método (aunque reconozco que el de penumbra es más eficiente).

Lo único que se me ocurre que haya podido pasar es que la "n" no sea el número de instancias del objeto, y por eso sale "array index out of bounds", como si le estuvieras pidiendo la id de más instancias de las que tienes en la room.

A ver si se soluciona.
Un saludo!

Le adjunto un editable, para el uso de Arrays (agregar, eliminar,  ordenamiento y visualización ), yo recomiendo el uso de arrays porque se obtiene un mejor control de programación a usar lista y colas, pero es solo mi punto de vista.

Archivo version gm8:

http://goo.gl/FS6IiD

PD: Se recomienda SIEMPRE al hablar de arrays  "persar en -1", para evitar errores de desbordamientos.
Aunque en muchos manuales no lo mensionen  :-[
? + F1 + google == : )

Yo tengo una duda, agradecería si Strod la puede resolver.

Después de ejecutar el código, ¿qué valores (id) tiene el arreglo global.arreglo[]? En el debug se puede revisar

Hola a todos,

Mega G, yo creo que el tema va por ahí, que no lo estoy aplicando bien o en los eventos correctos pienso yo. El ejemplo que me ha puesto  dmg969soft (muuuchas gracias), es justo lo que quiero hacer, le echado un vistazo por encima (sólo eso porque hoy no tengo tiempo de ponerme, espero hacerlo mañana) y tiene más miga de la que parecía en un principio, mañana lo estudio con detenimiento y lo intentaré trasladar a mi código.

Respecto a lo que me ha pedido penumbra, decir que no sabía que se podía comprobar los valores de variables en el modo debug  :-[, pues he puesto la variable que ha dicho en el apartado de expresiones y me da 'ERROR', lo que comentaba antes, no estoy haciendo algo bien.

Aqui lo dejo que me tengo que marchar, y agredeceros enormemente vuestra atención.



Bueno después de un parón, he podido seguir y he adaptado el código que puso dmg969soft en mi programilla y funciona perfectamente, es decir, que puedo indentificar las ids de un objeto que se crea en pantalla. El próximo paso es trastear de con cada instancia de forma individual.

Muchas gracias a todos por vuestra ayuda.