Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: klys en Julio 26, 2011, 10:01:49 AM

Título: Posible Bug: Unknow Variable
Publicado por: klys en Julio 26, 2011, 10:01:49 AM
Estando una variable correctamente en el evento de creacion del objeto, y luego usandola en otro evento del mismo objecto incurre en este raro error que solo eh podido resolver con la siguiente condicion en el evento donde ocurre el error:

[gml]if (variable_local_exists('Variable_Con_Error')==false) Variable_Con_Error=1[/gml]

Seria bueno si alguien mas tuvo este error, si encontro alguna mejor forma de resolverlo, alguna forma que sea definitiva, y asi me libre de la calamidad de esa condicion, que no me gusta para nada porque no deberia ser necesaria para este caso.

Un detalle que a lo mejor influya en este bug es que en el objeto donde ocurre el error en el evento de creacion se crean objetos childs, o tambien que es parent de varios otros objetos...

Nose precisamente la raiz del bug, seguire experimentando.

Uso: 8.0 (no 8.1)
Título: Re: Posible Bug: Unknow Variable
Publicado por: PoSvA en Julio 26, 2011, 11:17:55 AM
Ese error suele ser porque algun otro objeto quiere acceder a la variable antes de que el objeto con dicha variable se halla inizializado (creado) es decir creas el objeto y directamente intentas acceder a sus variables.
Tambien pasa que los objetos estan en la room, y segun en que orden los pones los eventos de create se ejecutan en un orden y si uno aun no se ha "creado" no se puede acceder a sus variables.

A mi pasaba tambien xD
Título: Re: Posible Bug: Unknow Variable
Publicado por: Metal Mario en Julio 26, 2011, 05:16:16 PM
Oh, ya entiendo...
...no, espera. Te refieres a que un objeto accede a una variable de un objeto que no existe, al igual que la variable que tampoco existe??? Bueno, eso explica porque a veces cuando modifico partes de mi juego y cargo la partida en la que estaba antes de modificarlo, aparecia este error.
Tambien tiene que ver con esto, no???
Título: Re: Posible Bug: Unknow Variable
Publicado por: klys en Julio 26, 2011, 05:33:21 PM
Claro, ese error tambien ocurre en esos casos, pero mi caso es un caso "bug de game maker", encontre la razon!

La razon de este bug y lo probablemente lo pueden reproducir y verificar es que cuando un objeto es parent (ojo, que es parent, no que tiene parent (child)) su create event al parecer falla en inicializar variables.

A todos los child del objeto donde ocurria este error les quite el parent y viola, adios bug.

Otro detalle:
El evento donde estoy llamando el uso de la variable, que incurria en el error, esta en un evento del mismo objeto donde fallaba en la creacion de la variable.
Título: Re: Posible Bug: Unknow Variable
Publicado por: Metal Mario en Julio 26, 2011, 06:10:35 PM
Pues es obvio que un parent no tiene que tener un create. Ahora entiendo porque todos mis parents no tiene create. Es algo raro, pero muy cierto: no creas el parent, ni las variables del parent, pues solo es un comparativo...
...no se si me entiendas. XD
No puede tomar una variable de un parent porque no existe, solo es para juntar algunos objetos del mismo tipo.
O algo asi XD.
Título: Re: Posible Bug: Unknow Variable
Publicado por: klys en Julio 26, 2011, 06:30:09 PM
El parent si se crea en si xd, el problema esta nada mas en la declaracion de variables en el evento de creacion del objeto parent, porque eh usando var = instance_create y esas variables si son validas, es bastante raro.

Segun lo que dices, los parent solo sirven para juntar objetos del mismo tipo? ... Eso supuse hacia... Pero que se anule la creacion de variables, no lo entiendo, lo buscare en la wiki de yoyogames a ver como funcionan los parent y asi eliminamos esta caja negra.

____________EDIT_______________________

Segun lo que dice http://wiki.yoyogames.com/index.php/Object_set_parent

Un parent es un objeto que le dara todos sus eventos a sus hijos. Practicamente con herencia, algo bien conocido por la POO.

Por eso al llamar el evento del parent ocurria ese error de "Unknow variable", porque la variable no la tiene el parent, sino sus hijos.

lol.
Título: Re: Posible Bug: Unknow Variable
Publicado por: Metal Mario en Julio 26, 2011, 07:12:02 PM
Ah!!!
Hmmm!!!
Que cosas, no??? XD
Bastante raro, debo admitirlo. La variable no la tendr?n los parent, sino sus hijos (que termino XD). Es raro, pero bastante logico, asi como en la vida real con la herencia genetica y todo eso.
Hmm, esto me queda aun mas claro...
Título: Re: Posible Bug: Unknow Variable
Publicado por: Killer en Julio 26, 2011, 07:36:35 PM
He tratado de reproducir el error, cree un objeto y le puse un evento create donde declare dos variables y otro evento donde debe utilizarlas.

Luego cree otro objeto y le asigne el primero como parent.

Ambos funcionaron sin ningun problema, tanto por separados como al ponerlos juntos.

Si pudieras especificar m?s como reproducir el problema, o pasar un editable donde se presente seria mejor, ya que yo nunca he tenido problemas usando parents.

P.D. Cuando dice que el parent da sus eventos a sus hijos no quiere decir que el parent se quede sin sus respectivos eventos, la herencia lo que hace es que los eventos que tiene el parent los tengan los hijos, en tanto ese evento no sea sobreescrito.
Título: Re: Posible Bug: Unknow Variable
Publicado por: MaanuRP en Julio 26, 2011, 10:25:29 PM
Si quieres que la variables que detecten este error se designen solas un "0" puedes activar la opcion: "Treat uninitialized variables as value 0" en la pesta?a "Errors" de las "Global options" del juego.
Título: Re: Posible Bug: Unknow Variable
Publicado por: Wadk en Julio 27, 2011, 03:17:16 AM
A ver, que andamos mal con la programaci?n orientada a objetos.
Si declar?s una variable en create de un objeto, la variable es del objeto y solo del objeto, sin importar si tiene parent o si es parent.
Por otro lado si un objeto sin evento create tiene un parent que declara una variable en create, el objeto hereda el evento create del parent (ya que ?l no tiene), y por lo tanto hereda tamibi?n la variable. Si el objeto tiene un parent que declara una variable en create, pero tiene tambi?n evento create, el objeto no hereda el evento del parent, y por lo tanto no hereda la variable. En ese caso, para que herede el create del padre y lo ejecute junto con su propio create, se usa la funci?n event_inherited().

Es posible que, cualquiera sea el error que estuviste experimentando, tenga que ver con lo que acabo de explicar.

Por cierto...
Cita de: MaanuRP en Julio 26, 2011, 10:25:29 PM
Si quieres que la variables que detecten este error se designen solas un "0" puedes activar la opcion: "Treat uninitialized variables as value 0" en la pesta?a "Errors" de las "Global options" del juego.
Mala, muy mala idea.
Título: Re: Posible Bug: Unknow Variable
Publicado por: MaanuRP en Julio 27, 2011, 03:36:14 AM
Wadk, aclare que la idea solo sirve si TODAS las variables que vaya a usar en el juego empezaran siendo 0, si es asi no es una mala idea.

Si todas las variables son 0 cuando empiezan, porque es mala idea?

(No es una pregunta retorica, pregunto porque estoy seguro que sabes mas que yo y que si estoy equivocado me vas a corregir :) )
Título: Re: Posible Bug: Unknow Variable
Publicado por: Wadk en Julio 27, 2011, 04:37:34 AM
Cita de: MaanuRP en Julio 27, 2011, 03:36:14 AM
Wadk, aclare que la idea solo sirve si TODAS las variables que vaya a usar en el juego empezaran siendo 0, si es asi no es una mala idea.

Si todas las variables son 0 cuando empiezan, porque es mala idea?

(No es una pregunta retorica, pregunto porque estoy seguro que sabes mas que yo y que si estoy equivocado me vas a corregir :) )
Simplemente porque trae un sinf?n de problemas y puede causar bugs muy jodidos y dif?ciles de encontrar y arreglar.
Título: Re: Posible Bug: Unknow Variable
Publicado por: MaanuRP en Julio 27, 2011, 04:42:18 AM
Cita de: Wadk en Julio 27, 2011, 04:37:34 AM
Cita de: MaanuRP en Julio 27, 2011, 03:36:14 AM
Wadk, aclare que la idea solo sirve si TODAS las variables que vaya a usar en el juego empezaran siendo 0, si es asi no es una mala idea.

Si todas las variables son 0 cuando empiezan, porque es mala idea?

(No es una pregunta retorica, pregunto porque estoy seguro que sabes mas que yo y que si estoy equivocado me vas a corregir :) )
Simplemente porque trae un sinf?n de problemas y puede causar bugs muy jodidos y dif?ciles de encontrar y arreglar.

Pero porque? Si lo unico que hace eso es identificar las variables como 0 si fueran a dar el error de que la variable no exista.
Si TODAS las variables de tu juego apenas se crean fueran 0 con o sin esa opcion tildada, cual es el problema?

PD: Insisto, al preguntar no te quiero contradecir ni faltar el respeto, solo pregunto porque me parece raro que hayan puesto en el software una opcion que es muy mala idea activarla.
Título: Re: Posible Bug: Unknow Variable
Publicado por: Killer en Julio 27, 2011, 11:03:22 AM
Imagina un c?digo que acabas de programar, un c?digo muy extenso y muy importante, con varias variables.

Ahora imagina que cuando estabas programandolo diste un teclazo accidental y escribiste mal alguna variable.

Gracias a ese teclazo y a la opcion de declarar variables automaticamente ahora tienes una variable extra en alguna parte, cuyo valor esta siendo cambiado o comprobado en lugar de la variable correcta.

Ese solo error te puede arruinar por completo el c?digo al alterar su comportamiento. Y un c?digo que se comporta inesperadamente tiende a ser m?s dificil de solucionar que un c?digo que simplemente te da error.

Por ejemplo, ya que la variable se declara a si misma y no te dar? un mensaje de error, existe la probabilidad de que no tengas la menor idea de donde esta el problema o como empezar a buscarlo, y es posible que a?n cuando leas y releas el c?digo no te des cuenta del problema.
Título: Re: Posible Bug: Unknow Variable
Publicado por: MaanuRP en Julio 27, 2011, 05:28:22 PM
Bueno, pero eso es si hay un error humano, yo cada vez que escribo el nombre de una variable me tomo el trabajo de ir al lugar donde se creo, seleccionar solo los caracteres necesarios, copiarlos y pegar el nombre de la variable donde debe ser, porque por mas que se escriba mal no te da error de sintaxis, por eso es un trabajo que hay que tomarse.
Total es el unico trabajo, ya que si te equivocas en una funcion o codigo, el programa si te detectara automaticamente que es un error.
Ademas apenas terminas el script o la parte del codigo debes revisar SIEMPRE las variables letra por letra para saber que estan bien escritas, eso lo se hasta yo que tengo muy poco en el Game  Maker y he trabajado con lenguajes que si te advierten de la variable mal escrita.

Ya si alguien escribe y solo se fia de la autocorreccion del editor de GML es otra cosa, ahi estamos hablando de un error humano, no de un error del software o de la opcion.
Título: Re: Posible Bug: Unknow Variable
Publicado por: Killer en Julio 27, 2011, 07:02:40 PM
Pues si no existe ning?n error humano entonces esta opci?n no es para nada necesaria en este caso, tu mismo estas recomendando la opci?n para evitar el error de variable desconocida, que es causado por un error humano.

Mencionas que tienes experiencia con lenguajes m?s estrictos, entonces sabes que esta opci?n ense?a p?simos h?bitos de programaci?n, no solo por que evita al usuario el trabajo de declarar las variale, sino por que si hay un error en el c?digo necesitas conocerlo, entenderlo y saber (o aprender) como arreglarlo, si tomas la salida f?cil no hay aprendizaje y por lo tanto no hay ganancia en tu experiencia con el GM.

Ahora bien, si tu haces un copy-paste cuando escribes nombres de variables, y luego de todos modos revisas CADA variable letra por letra, pues bien por ti, pero no debes asumir que todos los dem?s lo hacen, especialmente si consideras que son personas que podr?an apenas estar empezando con el GM, no tienen conocimientos previos de programaci?n, y son, por lo tanto, m?s propensas a un error humano, despues de todo los humanos son falibles.
Título: Re: Posible Bug: Unknow Variable
Publicado por: MaanuRP en Julio 27, 2011, 07:22:50 PM
En la segunda parte estoy totalmente de acuerdo con vos, pero seguro sabes que muchos lenguajes de programacion no hace falta declarar la variable para que funcione, pero tienes razon que si hay un error con eso, se va a complicar para saberlo.

Un ejemplo, en Visual Basic hay una funcion que tiene que ver con la declaracion de variables, es Option Explicit, si pones esta funcion en la parte General del codigo, sera como el Game Maker y te tirara error cuando la variable no se haya declarado.

Lo que si, para programar y hacer algo bueno hay que tener ganas y prestarle mucha atencion, coincidiras conmigo que un juego sin atencion al hacerlo o sin ganas no va a salir bien.

Yo soy un novato en GML, eso no lo discuto, si ves los post que cree, hay algunas dudas que son BASTANTE de novato jajaj, por eso hice una pregunta y nunca quise contra-decir a nadie :)
Título: Re: Posible Bug: Unknow Variable
Publicado por: Wadk en Julio 27, 2011, 08:05:05 PM
Cita de: MaanuRP en Julio 27, 2011, 07:22:50 PM
En la segunda parte estoy totalmente de acuerdo con vos, pero seguro sabes que muchos lenguajes de programacion no hace falta declarar la variable para que funcione, pero tienes razon que si hay un error con eso, se va a complicar para saberlo.

Un ejemplo, en Visual Basic hay una funcion que tiene que ver con la declaracion de variables, es Option Explicit, si pones esta funcion en la parte General del codigo, sera como el Game Maker y te tirara error cuando la variable no se haya declarado.
Por eso y por muchas razones m?s, VisualBasic es malo. Muy malo.
Título: Re: Posible Bug: Unknow Variable
Publicado por: MaanuRP en Julio 27, 2011, 08:20:26 PM
Podes saber mucho de GM, pero de lenguajes de programacion no sabes mucho.

Hay competencias, olimpiadas NACIONALES sobre Visual Basic, y dices que es malo?

Perdoname pero no sabes mucho, te puedo apostar que hay programas mucho mas eficaces echos en VB que en C++ .

Es mas, yo mismo se de ambos lenguajes, son los primeros que aprendi y de los que mas se, y sino es para hacer un SO o programas muy complicados, el VB sirve mucho mas, y es mucho mas rapido
Título: Re: Posible Bug: Unknow Variable
Publicado por: Wadk en Julio 28, 2011, 12:12:47 AM
Cita de: MaanuRP en Julio 27, 2011, 08:20:26 PM
Podes saber mucho de GM, pero de lenguajes de programacion no sabes mucho.

Hay competencias, olimpiadas NACIONALES sobre Visual Basic, y dices que es malo?

Perdoname pero no sabes mucho, te puedo apostar que hay programas mucho mas eficaces echos en VB que en C++ .

Es mas, yo mismo se de ambos lenguajes, son los primeros que aprendi y de los que mas se, y sino es para hacer un SO o programas muy complicados, el VB sirve mucho mas, y es mucho mas rapido
Me gustar?a explicarte mi punto de vista, pero esto se est? llendo demasiado fuera de tema. Desde ahora, c?ntrense en el tema original.
MaanuRP: Si te interesa mi respuesta, enviame un MP.
Título: Re: Posible Bug: Unknow Variable
Publicado por: soccer2008 en Julio 28, 2011, 12:39:51 AM
Cita de: MaanuRP en Julio 27, 2011, 08:20:26 PM
Podes saber mucho de GM, pero de lenguajes de programacion no sabes mucho.

Hay competencias, olimpiadas NACIONALES sobre Visual Basic, y dices que es malo?

Perdoname pero no sabes mucho, te puedo apostar que hay programas mucho mas eficaces echos en VB que en C++ .

Es mas, yo mismo se de ambos lenguajes, son los primeros que aprendi y de los que mas se, y sino es para hacer un SO o programas muy complicados, el VB sirve mucho mas, y es mucho mas rapido

Vaya lio esto sobre los lenguajes de programaci?n te doy mi opini?n sobre el asunto: Si hablamos de programas mucho m?s eficaces entre VB Y C++ asi por decirlo significa que no conoces a fondo lo que puede ofrecer el C++ o quiz?s te refieras a un versi?n antigua del C++ contra una versi?n avanzada del VB pero ni a?n asi se puede decir que en un LP puedes hacer mejores programas que otro LP, eso depende de como lo programes y el tiempo que le dediques incluyendo si hablamos de velocidad; Por supuesto que para hacer un programa en c++ vas a dedicar + tiempo que hacer un programa en VB y si nos ponemos a evaluar de que programa est? mejor que otro echo en un LP diferente, lo primero que debemos hacer es: si al desarrollar cierto programa hay una metodolog?a de desarrollo, un equipo de gesti?n (si fuera necesario), quienes lo desarrollan, testeo, benchmarking, etc y por ?ltimo el LP; Disculpame pero discrepo contigo sobre este asunto.

Citar
Si adjuntaras una parte de tu editable para probarlo y modificarlo ser?a una mejor opci?n XD  
Título: Re: Posible Bug: Unknow Variable
Publicado por: klys en Julio 28, 2011, 01:01:04 PM
Manu, simplemente la opci?n de inicilizar todas las variables no inicilizadas en 0 es una mala opci?n, es preferible que te de el error, sepas donde es, a que no te de y no sepas donde es.

A lo que tendr?s que usar debug mode y observar que pasa con las variables (y si es un script con variables locales es PEOR aun) y si es que no estas usando ciclos para alg?n proceso y el programa ni se ejecuta por errores l?gicos.

Osea es como trabajar de flojo, y como sabes: los flojos trabajan doble.

Cita de: Killer en Julio 26, 2011, 07:36:35 PM
He tratado de reproducir el error, cree un objeto y le puse un evento create donde declare dos variables y otro evento donde debe utilizarlas.

Luego cree otro objeto y le asigne el primero como parent.

Ambos funcionaron sin ningun problema, tanto por separados como al ponerlos juntos.

Si pudieras especificar m?s como reproducir el problema, o pasar un editable donde se presente seria mejor, ya que yo nunca he tenido problemas usando parents.

P.D. Cuando dice que el parent da sus eventos a sus hijos no quiere decir que el parent se quede sin sus respectivos eventos, la herencia lo que hace es que los eventos que tiene el parent los tengan los hijos, en tanto ese evento no sea sobreescrito.

Trata de esta forma:

inicilizas las variables en create, una en un parent y la otra en un child

En el parent vas a crear un evento que sea de presionar o mantener presionado algun boton (es donde me dio error exactamente) ahi usaras (no cambiaras) la variable que declaraste en la creacion del objeto.

Por ejemplo:

Parent_Obj:
- Create Event:
probandome = 1
- Press D:
if (probandome == 1) hspeed = 1

Child_obj: (Parent: Parent_Obj)
- Create Event:
nuse = 4


Al presionar D el resultado sera el dicho bug antes descrito.
Título: Re: Posible Bug: Unknow Variable
Publicado por: Wadk en Julio 28, 2011, 04:53:02 PM
Si el "bug" ocurre al poner el Child_obj en la room (y no el Parent_Obj), es un error tuyo.
Como el Child_obj tiene evento create, lo ejecuta en lugar de heredar el del padre, y por lo tanto Child_obj no tiene la variable "probandome". Por otro lado, Child_obj no tiene evento Press D y su parent s?, as? que lo hereda. Al presionar D, Child_obj intenta ejecutar el c?digo, pero falla porque no tiene la variable "probandome".
Para que funcione tendr?as que agregar lo siguiente en create de Child_obj:
[gml]event_inherited();[/gml]
As? Child_obj ejecuta su propio create, pero tambi?n el de su parent.