Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: codex en Octubre 13, 2014, 12:29:13 AM

Título: cuando se cumplan unas variables cambie a otra instancia igual? (solucionado)
Publicado por: codex en Octubre 13, 2014, 12:29:13 AM
hola! otra vez

me gustaría saber  como lo hago para cuando una instancia cambie a otra instancia igual cuando se cumplen unas variables...

por ejemplo: cuando todos los "puntos_accion=0" , cambie a otra instancia igual con los "puntos_accion>0"

tengo este codigo pero no termina de funcionar

///---end step---///
///----
with(unit_blue){
    if puntos_accion=0 and is_selected=true {
        var obj;
        obj=instance_nearest(x,y,unit_blue)
       
        if (obj.puntos_accion>0) {   
           is_selected=false;
           obj.is_selected=true;       
        }else{
           
            game_controller.alarm[0]=1;       
        }
   
    }
}
///----


Gracias
Título: Re:como hacer que cuando se cumplan unas variables cambie a otra instancia igual?
Publicado por: TheSandBoxMKG en Octubre 13, 2014, 02:14:49 AM
Cita de: codex en Octubre 13, 2014, 12:29:13 AM
hola! otra vez

me gustaría saber  como lo hago para cuando una instancia cambie a otra instancia igual cuando se cumplen unas variables...

por ejemplo: cuando todos los "puntos_accion=0" , cambie a otra instancia igual con los "puntos_accion>0"

tengo este codigo pero no termina de funcionar

///---end step---///
///----
with(unit_blue){
    if puntos_accion=0 and is_selected=true {
        var obj;
        obj=instance_nearest(x,y,unit_blue)
       
        if (obj.puntos_accion>0) {   
           is_selected=false;
           obj.is_selected=true;       
        }else{
           
            game_controller.alarm[0]=1;       
        }
   
    }
}
///----


Gracias
Este es el comando para cambiar instancias:
[gml]instance_change(objeto,ejecutareventos)[/gml]
Lo saqué de aquí:
http://www.comunidadgm.org/manual_GM/Instancias.htm (http://www.comunidadgm.org/manual_GM/Instancias.htm)
Título: Re:como hacer que cuando se cumplan unas variables cambie a otra instancia igual?
Publicado por: penumbra en Octubre 13, 2014, 02:27:16 AM
Cita de: codex en Octubre 13, 2014, 12:29:13 AM
cuando una instancia cambie a otra instancia igual cuando se cumplen unas variables...

No entiendo a qué te refieres. Las variables no se cumplen jamás, lo que se cumplen (o no) son las condiciones. Y a cambiar una instancia por otra igual no le veo sentido. Tampoco entiendo la manera en que usas with() ya que estás accediendo a unit_blue para preguntar qué instancia de unit_blue está más cerca de unit_blue  ???. Me parece que eso se podría hacer desde el objeto controlador sin necesidad de emplear with().
Título: Re:como hacer que cuando se cumplan unas variables cambie a otra instancia igual?
Publicado por: codex en Octubre 13, 2014, 08:41:42 PM
Perdón por la poca explicación...

Lo que pretendo hacer es un juego por turnos. y que  un objeto cuando termina  de gastar todos sus "puntos_accion", pase a otro objeto mas cercano de la  misma instancia y que tenga "puntos_accion" y asín sucesivamente hasta que no queden mas instancias que contengan "puntos_accion" y si no queda ninguna cambie de turno y restablezca todos los "puntos_accion" de todos los objetos de esa misma instancia.

gracias de antemano...
Título: Re:como hacer que cuando se cumplan unas variables cambie a otra instancia igual?
Publicado por: penumbra en Octubre 13, 2014, 09:48:43 PM
Mmm... Creo lo primero que se debería hacer al comienzo de cada turno es contar cuántas instancias con puntos_accion mayor a 0 hay. Dices que cuando se agoten los puntos de acción, se cambia de turno, ¿quiere decir que es el turno de la computadora? Tampoco sé qué criterio usas para seleccionar a la unidad activa al comienzo del turno. por ejemplo, si comienzas tu turno con 4 objetos, cuál de esos es el que comienza activo. Voy a suponer que al comienzo del turno, se selecciona la unidad activa con un click

[CREATE] de unit_blue[gml]
puntos_accion = 10   //No tengo idea de cúantos puntos usas, esto sólo es un ejemplo
activa = 0                //La unidad comienza estando inactiva[/gml]

[MOUSE LEFT PRESSED] de unit blue[gml]
if (seleccionar == true)
{
     activa = 1          // Esta unidad se marca como activa
     seleccionar = 0    // Ya no se puede seleccionar otra unidad en este turno
     game_controller.x = x
     game_controller.y = y     //Movemos al controlador a la misma posición de esta unidad, el controlador debería ser invisible
} [/gml]

[STEP] de unit blue [gml]
if (activa == true)
{
     if (puntos_accion > 0)
     {
          //Acciones de la unidad mientras está activa (atacar, defender, restar puntos de acción, etc)
     }
     else
     {
          cambiar_unidad = 1      //Avisar al controlador que debe cambiarse de unidad
          nua -= 1                    //Se reduce el número de unidades activas
          activa = 0                  //Esta unidad deja de estar activa
     }
}
[/gml]

[CREATE] de game_controller[gml]
globalvar nua, turno, seleccionar, cambiar_unidad;
nua = 0                    // Número de unidades activas         
turno = 1                  //1 = turno del jugador; 0 = turno de la IA (PC)
seleccionar = 1          // permite seleccionar la primera unidad al comienzo del turno
cambiar_unidad = 0    // Se pone en 1 cuando se debe cambiar de unidad
[/gml]

[EVENTO ROOM START] (Habitaciones donde se desarrolla el juego, no menús, no pantalla de título, etc)
[gml]
with (unit_blue)
{
     if (puntos_accion > 0)
          nua += 1               //Contar cuántas unidades disponen de puntos de acción
}[/gml]

[STEP] de game_controller[gml]
if (turno == 1) and (nua > 0)     //Turno del jugador
{
     if (cambiar_unidad == true)
     {
          var ua;
          ua = instance_nearest(x, y, unit_blue)     // Buscar la unidad más cercana al controlador
          if (ua.puntos_accion > 0)
          {
                ua.activa = 1                                    //La unidad más cercana y con puntos de acción disponibles se hace activa
                x = ua.x
                y = ua.y                                           //El controlador se mueve a la posición de la nueva unidad activa
                cambiar_unidad = 0                            // De momento no es necesario cambiar de unidad
          }
     }   

     if (nua <= 0)                               //Si se agotan las unidades activas
     {
          seleccionar = 1
          with (unit_blue) { puntos_accion = 10     //Restablecer puntos de acción para el siguiente turno
     }
          turno = !turno                                    //Ceder el turno a la PC (enemigo)
}
else
{
     //Acciones que ocurren cuando el turno es de la PC
}
[/gml]

Seguro le falta pulir cosas, es sólo una idea
Título: cuando se cumplan unas condiciones cambie a otra instanca igual (solucionado)
Publicado por: codex en Octubre 14, 2014, 06:00:14 PM
PERFECTO...
lo e adaptado a mi juego y me va genial, gracias!!..... era exactamente lo que quería hacer.

pd: si a alguien mas le interesa este código  en la parte de [step] game_control faltaba un "}" por lo demas esta genial



if (turno == 1) and (nua > 0)     //Turno del jugador
{
     if (cambiar_unidad == true)
     {
          var ua;
          ua = instance_nearest(x, y, unit_blue)     // Buscar la unidad más cercana al controlador
          if (ua.puntos_accion > 0)
          {
                ua.activa = 1                                    //La unidad más cercana y con puntos de acción disponibles se hace activa
                x = ua.x
                y = ua.y                                           //El controlador se mueve a la posición de la nueva unidad activa
                cambiar_unidad = 0                            // De momento no es necesario cambiar de unidad
          }
     }   

     if (nua <= 0)                               //Si se agotan las unidades activas
     {
          seleccionar = 1
          with (unit_blue) { puntos_accion = 10     //Restablecer puntos de acción para el siguiente turno
        }
          turno = !turno                                    //Ceder el turno a la PC (enemigo)
    }
} //<------ faltaba este.
else
{
     //Acciones que ocurren cuando el turno es de la PC
}



GRACIAS de nuevo amigo penumbra