Buda básica AS3. No me hace el addchild desde una clase
2 seguidores
mi .as es
<code>package{
import flash.display.*;
import flash.events.*;
public class probando extends Sprite{
public function probando(){
}
public function botones():void {
var cant:Number=4;
var inicioX:Number=55;
var inicioY:Number=50;
var mk:Sprite = new Sprite();
mk.graphics.beginFill(0xFF0000);
mk.graphics.drawRect(0,0, 50, 65);
mk.graphics.endFill();
for (var i:uint=0; i<4; i++) {
trace(i);
mk.x = 50;
mk.y= 50+50*i;
addChild(mk);
}
}
}
}
.fla
import probando;
var hola:probando=new probando();
hola.botones();</code>
PORQUE NO ME AGREGA LOS BOTONES AL ESCENARIO??? (SI COPIA LA FUNCION Y DIRECTAMENTE LA USA EN EL FLA ANDA, PERO DESDE LA CLASE NOM HACE EL ADDCHILD AL ESCENARIO).
grax!!!
tpmmds
Hola:
Imagino que ya te habrás dado cuenta, falta añadir la instancia "hola" a la lista de visualización:
<code>
var hola:probando=new probando();
addChild(hola);
hola.botones();
</code>
Un saludo
usuaria
grx!! Otra consullta, como tendria que hacer para poder pasarle a ese .as ; un boton que tengo en la libreri del .fla para que lo tome como modelo. Porque si hago algo ais:
public function botones(elboton:Movieclip):void {
var inicioX:Number=55;
var inicioY:Number=50;
for (var i:uint=0; i<4; i++) {
elboton.x = 50;
elboton.y= 50+50*i;
ruta.addChild(elboton);
}
}
solo me genera una sola vez el boton, y no entiendo porque. Yo quiero que se me generen tantos botones como quiero en este caso 4.
tpmmds
Hola:
Para instanciar símbolos que tengas en la biblioteca es bastante más fácil, por lo que me queda la duda de si es lo que quieres hacer o es otra cosa y no he entendido bien.
Si tienes en la biblioteca de Flash un botòn llamado "elboton", lo exportas para actionscript (lo seleccionas en la biblioteca, pulsas botón derecho/Propiedades, y activas "Exportar para ActionScript), y escribes:
<code>
var boton:MovieClip;
for (var i:uint=0; i<4; i++) {
boton = new elboton();
boton.x = 50;
boton.y = 50+50*i;
ruta.addChild(boton);
}
</code>
Para instanciar elementos de la biblioteca se hace como para cualquier otra clase, con el operador "new"
Un saludo, y no olvides exportar el botón para AS.
P.D.: Cuando pasas un parámetro a una función, en este caso un MovieClip (elboton) se pasa "por referencia", NO se hace una copia del mismo que se pasa a la función. Por eso, sólo tienes UN BOTÓN en el código que has escrito.
usuaria
lo q pasa es que esa funcion que escribi no esta en el .fla sino en una clase. si bien logro pasar el boton a esa clase solo logro q me lo cree una sola vez.
tpmmds
Hola:
Cuando llames a la función, no le pases una instancia del botón ya creada, ya que esto sólo te va a valer una vez; sino que cada vez que la llames, pásale una nueva instancia:
<code>
botones(new elboton());
</code>
Así, te puedes "jartar" de pasarle NUEVOS botones a la función sin problemas.
Como decía antes, si lo que haces es esto
<code>
//ERRONEO
var boton:MovieClip = new elboton():
botones (boton);
botones(boton);
</code>
Es el MISMO botón pasado dos veces a la función.
Un saludo.
usuaria
sigue sin andar. alguna otra solucion?? grx!!
el problema es que:Quiero crear una botonera, pasando un boton modelo que tengo en la libreria a la clase. El problema es que si bien el botonModelo lo pasa no me lo hace tantas veces como indica el foro si no que me termina quedando uno solo y en la ultima posicion correpondiente al for. alguna solucion???grx!
<code>public class botonera extends MovieClip{
public var ruta:MovieClip;
public var bot:MovieClip;
public function botonera(lRuta:MovieClip,nombres:Array,botonModelo:MovieClip){
ruta=lRuta;
bot=botonModelo;
this.crearbtn(nombres,bot,ruta);
}
public function crearbtn(secciones:Array,bot:MovieClip,lRuta:MovieClip){
for (var i:uint=0; i<secciones.length; i++) {
var btn:boton = new boton(secciones[i],i,bot,lRuta);
this.addChild(btn);
}
}
}
}</code>
<code>public class boton extends MovieClip{
public var caja:TextField;
public var ruta:MovieClip;
public function boton(seccion:String ,i:int,botonModelo:MovieClip,lRuta:MovieClip){
ruta=lRuta;
var inicioX:Number=60;
var inicioY:Number=50;
caja=new TextField();
caja.x = 10+inicioX*i;
caja.y= inicioY;
caja.text=seccion;
addChild(caja);
//porque solo me crea un botonModelo en vez de crearme la misma cantidad de cajas que me crea?? Es como si me lo fuera corriendo el boton hasta alcansar la ultima posicion correpondiente con el for de botonera.
botonModelo.x = 10+inicioX*i;
addChild(botonModelo);
}</code>
tpmmds
Hola:
Creo que acabamos antes si te miras este ejemplo ;-) :
http://blog.coconnut.com/source/jel/Varios/Botones.rar
Es un Fla y la clase principal que hace la botonera.
Como comenté más arriba, si sólo instancias UN BOTON tienes un botón moviendose por el escenario :-) . Tendrás tantos botones como veces utilices el operador "new".
Hacer "new" es equivalente en programación al gesto de arrastrar desde la biblioteca al escenario un símbolo. Y sucede igual: tienes tantos símbolos en el escenario, como veces hayas arrastrado símbolos a él.
Un saludo.