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

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

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().

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

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

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