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í?.

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





#2 Enero 27, 2014, 02:36:20 PM Ultima modificación: Enero 27, 2014, 02:48:35 PM por DarkKRuleR
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...

Muchas gracias a los dos. Tomo buena nota  ;)

#4 Enero 28, 2014, 10:00:58 PM Ultima modificación: Enero 28, 2014, 10:03:22 PM por Slade
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.  ;)

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
}

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  :)