Botones con parámetros en Actionscript 3
Este es un código de ejemplo muy sencillo de cómo asignar funciones con parámetros a botones dinámicamente con un bucle for();
Este era un recurso muy utilizado en Actionscript 2 cuando tenÃamos varios botones con nombres con una secuencia numérica (ej: boton1, boton2, boton3 etc..)
-
for (var i:Number = 1; i <= 5; i++)
-
{
-
this["boton" + i].num = i;
-
this["boton" + i].onRelease = function()
-
{
-
trace("Soy el botón " + this.num);
-
};
-
}
HacÃamos un tÃpico scope colocando el parámetro (en este caso la variable "num") dentro del objeto botón, y luego el la función que ejecuta el evento onRelease (o el que sea). De esta manera con un this podÃamos recuperar ese parámetro y con un if() o un switch() ejecutabamos las funciones correspondientes a cada botón.
En Actionscript 3 no podemos asignar directamente el parámetro al botón ya que nos lanzarÃa un error:
¿Cómo podemos hacerlo ahora?
Una solución rápida es recuperar el valor númerico del botón a partir del nombre del clip:
-
for (var i:Number = 1; i <= 5; i++)
-
{
-
this["boton" + i].addEventListener(MouseEvent.MOUSE_UP,clicBoton);
-
}
-
function clicBoton(e:MouseEvent)
-
{
-
var nombre:String = e.currentTarget.name;
-
var num:uint = uint(nombre.replace("boton", ""));
-
-
trace("Soy el botón " + num);
-
}
Únicamente recuperamos el nombre del botó clicado y eliminamos el String "boton" con lo que nos queda el numero correspondiente.
Otro opción algo más laboriosa pero que nos permite más control de los parámetros en códigos más complejos serÃa crearnos una clase que extienda de simpleButton que permita lanzar listeners con parámetros.
-
package
-
{
-
import flash.events.EventDispatcher;
-
import flash.events.MouseEvent;
-
import flash.display.SimpleButton;
-
//-------------------------------------------------
-
public class BotonScope extends SimpleButton
-
{
-
private var _boton:SimpleButton;
-
private var _param:Object;
-
private var _listener:Function;
-
//-------------------------------------------------
-
public function BotonScope(b:SimpleButton,p:Object)
-
{
-
_boton=b;
-
_param=p;
-
}
-
//-------------------------------------------------
-
override public function addEventListener(type:String,
-
listener:Function,
-
useCapture:Boolean = false,
-
priority:int = 0,
-
useWeakReference:Boolean = false):void
-
{
-
_listener = listener
-
_boton.addEventListener(type,listenerParam,useCapture,
-
priority,useWeakReference);
-
}
-
private function listenerParam(e:MouseEvent)
-
{
-
_listener(e,_param);
-
}
-
//-------------------------------------------------
-
}
-
}
Esta clase simplemente extiende de simpleButton y recibe como parámetro el objeto simpleButton que tengamos colocado en el timeline y también incluiremos un objeto que contendrá los parámetros que nos interesen.
Sobrescribiremos con override la function addEventListener. Lo que haremos es que el listenr ejecute la función interna de la clase que en realidad lo unico que hace es ejecutar la función asignada desde el timelime pero pasandole el objeto con los parámetros:
-
_listener(e,_param);
Desde el timeline asignaremos los listeners de esta manera:
-
import BotonScope;
-
-
for (var i:Number = 1; i <= 5; i++)
-
{
-
var param:Object = new Object();
-
param.num = i;
-
-
var boton:BotonScope = new BotonScope(this["boton" + i],param);
-
boton.addEventListener(MouseEvent.MOUSE_UP,clicBoton);
-
}
-
-
function clicBoton(e:MouseEvent,param:Object)
-
{
-
trace("Soy el botón " + param.num);
-
}
Creamos el objeto con los parámetros y lo incluimos dentro del constructor del botón. De esta manera las funciones asignadas al listener recuperarán el objeto con los parámetros internos de cada botón.
Post relacinonados:
9 Comments »
RSS feed for comments on this post. TrackBack URI










Muy útil Z, sobre todo cuando estás tratando de encariñarte con AS3 ^^
Excelente!, no me sabÃÂa eso de pasar funciones como parámetros
! En verdad creo que me va a servir
.
También es posible extender a SimpleButton con una clase dinámica obteniendo prácticamente el mismo caso que en AS2.
hola.....
he nesecitado ayuda para crear botones en AS3, y que cada uno de estos cumpla una funcion, como transparencia, rotacion, escala.....
juanmaz28@hotmail.com
Epa como esta quisiera saber si me pueden ayudar con lo codigos para botones en AS3 porque estoy un poquito vuelto loco con eso.
Me porian ayudar por favor
@devt16: Pásate por los foros de AS3 de Cristalab, y ahà dejas las dudas que tengas, seguro que te podremos ayudar
http://www.cristalab.com/foros/viewforum.php?f=40
buenÃsimo!!!
muchas gracias!!
Hola, me ando haciendo una bola con esto del AS3, mi problema es el siguiente, y me gusatria muchoq ue me ayuden. tengo un nuevo trabajo y mi estadia en el depende de esto! estoy haciendo un CD interactivo, hice un movieclip y dentro de este movieclip lo hice boton, parq ue el boton tuviera animacion y luego al quedar estatico me diera donde pinchar, pero no encuentro el codigo correcto para hacerlo porque me tira un error. dando vuleta en la web me encontre que ya no se pueden usar los codigos AS2 y los Codigos AS3 que me he encontrado no me resuelven el problema... por favor alguien asesoreme!!! :S
Hola Buenas, lo primero comentar que soy nuevo en este mundo y estoy aprendiendo un poquito de flash para una aplicación que tengo que entregar a un profesor. Mi pregunta es cómo crear un botón (todo mediante código) dentro de una clase de una aplicación que ya me funciona, para que el botón se vea y al pulsarlo me ejecute un archivo .swf externo. Muchas gracias y cualquier idea me serÃa muy muy útil.
Saludos y agradecer de antemano a todos los que colaboran en este foro.