|
Hola!!!! Tengo una dudilla Como hago para pasarle el Array a la funcion construirMenu(): Código :
package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.Loader;
import flash.net.URLRequest;
public class Principal extends MovieClip{
private var _botones:Array;
private var _contenedor:MovieClip
private var _cargador:Loader
public function Principal(){
_botones = new Array(new Web(),new Fotografia(),new Animacion(),new Identidad(),new Impresos(),new Perfil(),new Contacto());
_contenedor = new MovieClip();
addChild(_contenedor);
construirMenu();
}
private function construirMenu():void{
var btn:MovieClip;
var i:uint=0
btn = _botones as MovieClip;
btn = _botones[i] as MovieClip;
btn.swfRuta = "cargas/swf" + i + ".swf";
btn.addEventListener(MouseEvent.CLICK,onClickBtn);
}
private function onClickBtn(e:MouseEvent):void{
_cargador = new Loader();
_cargador.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteLoad);
_cargador.load(new URLRequest(e.currentTarget.swfRuta));
trace("sisarras");
}
private function onCompleteLoad(e:Event):void{
var swfCargado:MovieClip = e.target.content as MovieClip;
if(_contenedor.numChildren > 0) {
_contenedor.removeChildAt(0);
}
_contenedor.addChild(swfCargado);
}
}
}
Gracias |
|
|
Diana, ya que has declarado tu array FUERA de cualquier función, Esa variable está "a nivel de clase". Lo que quiere decir es que lo puedes usar DENTRO de cualquier función NOTA:Si alguna vez queremos pasar a una función un array pues es como cualquier otro tipo de "argumento" Código :
function unafuncion(){
var miArray=new Array() //<--si lo declaramos aquí
//lo podemos usar sólo dentro de esta función
//y lo podemos usar como argumento
....
cambiaArray(miArray)
}
function cambiaArray(miArray){
....
}
|
|
|
Pues veras, soy la afortunada pupila de jn_flash, el me estuvo enseñando este ejemplo pero con un boton de la biblioteca que se triplicaria y una funcion a cadauno, todo esto dentro de un for, funciono perfectamente, obvio, pero ahora no he podido aplicarlo a mi proyecto en el que cada boton es una ilustracion distinta y ya esta en el escenario este es code del ejemplo que Johnatan me hizo: Código :
package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.Loader;
import flash.net.URLRequest;
public class Main extends MovieClip
{
private var _botones:Array;
private var _contenedor:MovieClip
private var _cargador:Loader
public function Main()
{
_botones = new Array(new Btn(),new Btn(),new Btn());
_contenedor = new MovieClip();
addChild(_contenedor);
_contenedor.x = _contenedor.y = 10;
construirMenu();
}
private function construirMenu():void{
var btn:MovieClip;
for(var i:uint=0; i<_botones.length;++i){
btn = _botones[i] as MovieClip;
trace(btn);
btn = _botones[i] as MovieClip;
btn.x = (btn.width + 5) * i;
btn.y = 30;
addChild(btn);
//trace(btn);
btn.swfRuta = "assets/swf" + i + ".swf";
btn.addEventListener(MouseEvent.CLICK,onClickBtn);
}
}
private function onClickBtn(e:MouseEvent):void{
_cargador = new Loader();
_cargador.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteLoad);
_cargador.load(new URLRequest(e.currentTarget.swfRuta));
}
private function onCompleteLoad(e:Event):void{
var swfCargado:MovieClip = e.target.content as MovieClip;
if(_contenedor.numChildren > 0) {
_contenedor.removeChildAt(0);
}
_contenedor.addChild(swfCargado);
}
}
}
|
|
|
Si lo que tienes es en el escenario una serie de botones cuyo nombre de instancia es, p.e. "bt1","bt2","bt3" el array simplemente lo formas como Código : private var _botones:Array=new Array(bt1,bt2,bt3) O, en tu función Main Código :
public function Main()
{
_botones = new Array(bt1,bt2,bt3);
construirMenu();
}
Si están dentro de un MC cuyo nombre de instancia es "contenedor", el array se declararía como Código : _botones = new Array(contenedor.bt1,contenedor.bt2,contenedor.bt3); Si lo que tienes es sólo la biblioteca. Vamos, que los quieres crear la cosa es "cómo crear un objeto de una Clase cuando sabemos el nombre". Para ello debemos usar "getDefinitionByName()". Vamos, supongo que tus botones serán de las Clases "Bt1","Bt2","Bt3" -observa que las Clases suelen tener como nombre en mayúsculas. Podríamos escribir Código :
public function Main()
{
_contenedor = new MovieClip();
addChild(_contenedor);
_contenedor.x = _contenedor.y = 10;
for (var i:int=1;i<=3;i++){
var ClassReference:Class = getDefinitionByName("Bt"+i) as Class;
var bt:Object = MovieClip(new ClassReference());
_botones.push(_contenedor.addChild(bt);
}
construirMenu();
}
Si no los tienes en el escenario, sino simplemente Y ya no tienes que crearte el array nunca más. |
|