A Flash le pasa como a mí, que no sé si contenedor es un MovieClip o un Sprite. Vale, veo que es un Sprite.
Si fuera un MovieClip (o extendiera de MovieClip) sería "dinamic"(*). Esto es, se puede hacer referencia a una variable o a un MovieClip como
Código ActionScript :
contenedor.variable=10 //p.e.
contenedor.mc1.play(); //p.e.
Como no lo es -y realmente no queremos que lo sea, usemos una variable temporal a la hora de hacer el addChild que haga referencia al MC añadido y usémoslá
Código ActionScript :
var ref_temporal:MovieClip=MovieClip(parent).contenedor.addChild(mc1);
ref_temporal.play();
Lo del hacer una variable temporal que haga referencia a un MC se hace mucho. Ya en AS.2 teníamos un MC llamado "mimc" y escribíamos
Código :
//***AS.2***/
var ref_mimc=mimc
//y, a partir de ahora
ref_mimc._x=100
//es lo mismo que
mimc._x=100
//ó en un duplicate
var ref_mimc=original.duplicateMovieClip("copia",1)
//y, a partir de ahora
ref_mimc._x=100
//es lo mismo que
copia._x=100
(*)Al contrario que en AS.2, donde todas las Clases eran "dinamic" en ese sentido, en AS.3 sólo es "dinamic" la Clase MovieClip -y todas las que extiendan de ellas-. Ese es el motivo, por ejemplo, de que cuando tenemos un botón
Código ActionScript :
b1 = new Button();
b1.addEventListener(MouseEvent.CLICK, buttonClick);
private function buttonClick(e:MouseEvent) {
var button:Button = e.target as Button;
trace(button.label)
}
//pero NO podemos hacer
b1 = new Button();
b1.id=1 //<-------¡¡ERROR!!
b1.addEventListener(MouseEvent.CLICK, buttonClick);
private function buttonClick(e:MouseEvent) {
var button:Button = e.target as Button;
trace(button.id) //<----¡¡ERROR!!
}
Si en lugar de un botón fuera un MovieClip SÍ se podría hacer
Código ActionScript :
b1 = new MovieClip();
b1.id=1 //<-------Sí, pues es MovieClip
b1.addEventListener(MouseEvent.CLICK, buttonClick);
private function buttonClick(e:MouseEvent) {
var mc:MovieClip = e.target as MovieClip;
trace(mc.id)
}