Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Jangse en Enero 01, 2014, 01:21:09 PM

Título: ¿Es mejor declarar todas las variables globales?
Publicado por: Jangse en Enero 01, 2014, 01:21:09 PM
Pues empiezo a tener mis dudas. Por que declaro variables locales en el personaje, y luego, si creo un objeto controlador (donde van vidas, scores, energia, draws, etc...) no me reconoce ni una.

O como otra opción, colocar los controles de vida de personaje (puntuaciones y demas) en él.

No entiendo que mucha gente crea un nuevo objeto controlador para llevar marcadores ¿No es mejor crearlo todo dentro de nuestro objeto personaje jugador? Así, las variables si pueden ser locales.

Si se empieza a crear objetos para cada cosa del juego, entonces, deberemos por norma crear todas las variables globales ¿No es así?.
Título: Re:¿Es mejor declarar todas las variables globales?
Publicado por: computerguyhunter en Enero 27, 2014, 08:24:53 AM
No es necesario que crees variables globales, simplemente tienes que escribir el punto de pertenencia de esa variables; es decir a que objeto pertenece tal variable y serán existentes en otros objetos.
Ejemplo:
Objeto PERSONAJE

//Evento create del objeto personaje
life=100


Objeto BARRA_DE_VIDA

//mensionar la variable de otro objeto poniendo el punto de pertenencia "."
draw_text(x,y,PERSONAJE.life)
PERSONAJE.life-=50




Título: Re:¿Es mejor declarar todas las variables globales?
Publicado por: DarkKRuleR en Enero 27, 2014, 02:36:20 PM
como dice computerguyhunter, eso es la CLAVE de Game Maker (y de todos los lenguajes en general)

Y te doy un combo: si creas un objeto por codigo y quieres acceder en un futuro a sus variables... así

OBJ = instance_create(x, y, objeto);

y luego haces:

OBJ.variable...

accederás a la variable del objeto exacto que has creado, y no de todos los que se llamen igual!

NUNCA uses globales. A mí me daban errores al cargar el juego...
Título: Re:¿Es mejor declarar todas las variables globales?
Publicado por: Jangse en Enero 27, 2014, 07:37:57 PM
Muchas gracias a los dos. Tomo buena nota  ;)
Título: Re:¿Es mejor declarar todas las variables globales?
Publicado por: Slade en Enero 28, 2014, 10:00:58 PM
Que tal, veo que ya te han contestado, pero te dejo esto  que tambien  te puede ser util al querer cambiar el valor de una varible local de muchos objetos a la vez desde un solo objeto.

Ejemplo:

{
 
  for (i=0; i<instance_count; i+=1)
  {
    objeto_actual = instance_id[i];
    if (instance_exists(objeto_actual))
      if (objeto_actual.object_index == personaje)
      {
        if (objeto_actual.vida < 100)
          {objeto_actual.vida=100}
      }
  }
}


esto es muy util a la hora de tener varias instancias y querer cambiarles una variable local a un tipo de instancias y a otras no.

Saludos.  ;)
Título: Re:¿Es mejor declarar todas las variables globales?
Publicado por: penumbra en Enero 29, 2014, 01:46:16 AM
Cita de: Slade en Enero 28, 2014, 10:00:58 PM
esto es muy util a la hora de tener varias instancias y querer cambiarles una variable local a un tipo de instancias y a otras no.

Si se tiene GM 8, que es el caso, creo que una manera más sencilla de hacerlo sería así (no vale para GM:S por que quitaron funciones dinámicas)


with (all)
{
     if (variable_local_exists(vida) ) and (variable_local_exists(vida) < 100)
           vida = 100
}
Título: Re:¿Es mejor declarar todas las variables globales?
Publicado por: Slade en Enero 29, 2014, 02:21:16 AM
Cita de: penumbra en Enero 29, 2014, 01:46:16 AM


Si se tiene GM 8, que es el caso, creo que una manera más sencilla de hacerlo sería así (no vale para GM:S por que quitaron funciones dinámicas)

[spoiler]
with (all)
{
     if (variable_local_exists(vida) ) and (variable_local_exists(vida) < 100)
           vida = 100
}
[/spoiler]

Eso tambien funcionaria muy bien.
pero el codgo que he puesto es para un caso en donde hay varios objetos de distintos tipos con las mismas variables locales pero solo se le quiera cambiar el valor de las variables a todos los objetos de un tipo particular.

Saludos  :)