Hola chicos...

Me explico... Quiero poder instanciar varias veces un objeto, y modificar las propiedades particulares de esos objetos instanciados.

La idea sería poder instanciar un enemigo en la pantalla, y para hacerlo sencillo, que se moviera en horizontal, por ejemplo.

Lo que tengo en la ROOM es:

- Un objeto que llamo objControl que NO tiene sprite.

En el DRAW de ese objeto controlo el pintado de los sprites varios, y el movimiento de los enemigos.

Ahora mismo, tengo una variable global (por ejemplo -posicion_horizontal-) que puedo incrementar para que el enemigo avance.

El problema viene cuando yo quiero tener dos o más enemigos IGUALES. ¿Cómo lo haría para luego poder acceder a cada una de las variables -posicion_horizontal- de cada objeto creado, para darle a cada uno una velocidad diferente y poder variarla a mi gusto?


Gracias a todos..


Lo que se me ocurre es que dentro en el objeto enemigo pongas algo así:

[GML] var pos;
pos = global.posicion_horizontal (o como sea que se llame tu variable global)
[/GML]

Y cuando quieras modificar la velocidad/posición de una instancia del enemigo, guardas su id en una variable por ejemplo "enem" y escribes "enem.pos = [el valor que quieras colocar]"
Solo intento crear ideas, en forma de obras de arte interactivas.

Para acceder a variables de otro objeto se tiene que escribir la id u object index de la instancia a la que se quiere acceder seguido  de un punto y la variable deseada.

Ejemplos.
[gml]
//Se puede acceder a la instancia usando su object index.
/*Solo es recomendable cuando tienes una sola instancia del objeto ya que
se accede a la primera instancia creada del objeto y no a una en especifico.*/
obj_control.lluvia=0;

/*También se puede mediante su id o identificador único de la instancia, esta se
obtiene de diversas maneras (busca en el manual), 
(al poner el mouse sobre una instancia en el editor de rooms se puede ver su id)*/
10035.caminar=false;
//ó
var a;
a=instance_nearest(x, y, obj_enemigo);
if instance_exists(a){
     a.vida-=10;
}
[/gml]

También existe el bucle with que ejecuta las instrucciones deseadas dentro de cada instancia del objeto deceado ó en una instancia unica.
[gml]
//Con el siguiente código se destruyen todas las balas del mapa.
with(obj_bala){
    //Esto se ejecuta en cada instancia del objeto bala
    instance_destroy();
}

//ó se puede usar para una instancia en especifico.
with(10024){
     direction=180;
     speed=10;
     correr=true;
     iniciar_pista(0, 0, 1);
}
//ó
var a;
a=instance_place(x, y, obj_monje);
with(a){
     /*wololo*/
}
//también se puede usar la palabra especial "other".
with(other){/*...*/}

//instance_create devuelve el id de la instancia creada.
with( instance_create(x, y, obj_bala ) ){
     speed=10;
     direction=obj_player.direction;
}
[/gml]

Desde el editor de rooms al poner el mouse sobre una instancia se puede acceder al "creation code" de la instancia en especifico, allí puedes definir propiedades especificas de esa instancia. Por ejemplo cambiarle el color, el tamaño o hacer que siga un path diferente a los demás.