Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: king195 en Abril 22, 2015, 11:50:17 PM

Título: Instancias de objeto
Publicado por: king195 en Abril 22, 2015, 11:50:17 PM
Tengo un Script donde con un bucle For recorro unas casillas que contienen unos números y los números de ese array los necesito pasar a una variable que tengo en el objeto Alert(en un create event inicializado a 0) que se acaba de crear. El tema es que se queda siempre a 1 todas las instancias de obj_alert. Qué debería de hacer para que fuera para cada uno diferente, o si tenéis una forma mejor de resolverlo.

Script
instance_create(xx+1,yy+1,obj_alert);
                        if(aux_casillas[i,j] == 1){
                            with(obj_alert){
                                alerta = 1;
                            }
                        }
                       
                        if(aux_casillas[i,j] == 2){
                            with(obj_alert){
                                alerta = 2;
                            }
                        }
                       if(aux_casillas[i,j] == 3){
                            with(obj_alert){
                                alerta = 3;
                            }
                        }
Título: Re:Instancias de objeto
Publicado por: penumbra en Abril 23, 2015, 02:02:54 AM
Si quieres saber por qué pasa, es tan fácil como usar el debugger.

Una suposición es que si todas las instancias se quedan a 1, entonces, según el código, aunque el arreglo que r ecorres contenga distintos valores, en la última iteración del ciclo, la condición que se valida es la primera y por eso TODAS las instancias de el objeto alert se quedan en 1

Suponiendo que los ciclos se ejecuten 10 veces. Si te fijas en la lógica del código, no importa lo que suceda en las iteraciones anteriores, porque el valor de la variable alerta al final dependerá solo de la última iteración y del último valor de i y j, que apuntan a esa casilla "final" del arreglo. Así que con la lógica que usas, el valor de todas las variables alerta siempre va a ser el mismo.

Cita de: king195 en Abril 22, 2015, 11:50:17 PM
con un bucle For recorro unas casillas que contienen unos números y los números de ese array los necesito pasar a una variable
No tiene mucho sentido hacer iteraciones que al final no van a contar. No alcanzo a ver por qué quieres recorrer un arreglo si al final, sólo un valor de ese arreglo se va a volcar a UNA SOLA variable individual, y ese valor siempre va a ser el último valor del arreglo (según el máximo valor que i y j puedan tener). Sería más rápido indicar directamente qué posición del arreglo se guarda en la variable alerta.

Usar with (objeto) provocará que el valor sea siempre el mismo para todas las instancias.
Título: Re:Instancias de objeto
Publicado por: king195 en Abril 23, 2015, 12:59:54 PM
Cita de: penumbra en Abril 23, 2015, 02:02:54 AM
Si quieres saber por qué pasa, es tan fácil como usar el debugger.

Una suposición es que si todas las instancias se quedan a 1, entonces, según el código, aunque el arreglo que r ecorres contenga distintos valores, en la última iteración del ciclo, la condición que se valida es la primera y por eso TODAS las instancias de el objeto alert se quedan en 1

Suponiendo que los ciclos se ejecuten 10 veces. Si te fijas en la lógica del código, no importa lo que suceda en las iteraciones anteriores, porque el valor de la variable alerta al final dependerá solo de la última iteración y del último valor de i y j, que apuntan a esa casilla "final" del arreglo. Así que con la lógica que usas, el valor de todas las variables alerta siempre va a ser el mismo.

Cita de: king195 en Abril 22, 2015, 11:50:17 PM
con un bucle For recorro unas casillas que contienen unos números y los números de ese array los necesito pasar a una variable
No tiene mucho sentido hacer iteraciones que al final no van a contar. No alcanzo a ver por qué quieres recorrer un arreglo si al final, sólo un valor de ese arreglo se va a volcar a UNA SOLA variable individual, y ese valor siempre va a ser el último valor del arreglo (según el máximo valor que i y j puedan tener). Sería más rápido indicar directamente qué posición del arreglo se guarda en la variable alerta.

Usar with (objeto) provocará que el valor sea siempre el mismo para todas las instancias.

Obviamente lo que ves de código son apenas pocas lineas del total del script. Y es que para la solución de esto no hace falta ver todo el código, estoy 100% seguro de que aux_casillas[i,j] contiene el valor que le quiero pasar a Alerta. El único problema es pasarle el valor de aux_casillas a alerta en cada distinta instancia.
Título: Re:Instancias de objeto
Publicado por: king195 en Abril 23, 2015, 01:06:17 PM
Ya lo he solucionado, he estado un buen rato pero al fin he encontrado la solución simple y sencilla.

alert = instance_create(xx+1,yy+1,obj_alert);
                            with(alert){
                                alerta = aux_casillas[i,j];
                            }


Como podéis observar le asigno como dice en el Manual de Game Maker con una variable el id de la instancia del objeto que se acaba de crear, y a esa ID le doy el valor que tiene ahí mismo el array, diciendole con el with que sea el valor de la variable, es decir el ID del objeto directamente.

Como curiosidad Obj_alert.id no sirve, he tenido que llevarlo a una variable a parte y después meterlo en el with para que hiciera efecto desde el script.
Título: Re:Instancias de objeto
Publicado por: arcangelcaos en Abril 23, 2015, 01:10:01 PM
Casualmente te estaba escribiendo eso. Que si usas el nombre del objeto, se cambian todas las instancia de ese objeto.
Título: Re:Instancias de objeto
Publicado por: king195 en Abril 23, 2015, 01:12:26 PM
Cita de: arcangelcaos en Abril 23, 2015, 01:10:01 PM
Casualmente te estaba escribiendo eso. Que si usas el nombre del objeto, se cambian todas las instancia de ese objeto.

Ya, pero como he dicho en el mensaje pensé que escribiendo

obj_alert.id

Podia servir, ya que se hacia referencia a la misma ID, y no es así. Para la proxima pregunta que sea de este estilo recordad que tenemos que llevar el ID a una variable a parte y esa variable meterla directamente en el With