Foros del Web » Creando para Internet » Flash y Actionscript »

Crear funciones dinámicamente con for() en AS2

Estas en el tema de Crear funciones dinámicamente con for() en AS2 en el foro de Flash y Actionscript en Foros del Web. Buenas tardes a todos, hace tiempo estoy con este tema y la verdad aun no lo puedo resolver. Puntualmente necesito crear funciones de forma dinámica ...
  #1 (permalink)  
Antiguo 18/10/2010, 15:46
 
Fecha de Ingreso: agosto-2010
Mensajes: 8
Antigüedad: 14 años, 3 meses
Puntos: 1
Pregunta Crear funciones dinámicamente con for() en AS2

Buenas tardes a todos,
hace tiempo estoy con este tema y la verdad aun no lo puedo resolver.
Puntualmente necesito crear funciones de forma dinámica es decir que a través de la función for pueda generar distintas funciones, en este caso para aplicarlas a botones.

El código que he generado es el siguiente:
Código:
for(i=1; i<10;i++){
	_root.attachMovie("mcBtnBase", "boton"+i, this.getNextHighestDepth());
	_root["boton"+i]._x = 10+i*40;
	_root["boton"+i]._y = 10+i*40;
	_root["boton"+i].texto.text = "Boton "+i;
	
	this["funcBtn"+i] = function(){
		getURL("http://www.google.com/"+i);
	}
	
	this["boton"+i].onRelease = this["funcBtn"+i];
}
He puesto un link en google que en realidad es solo de prueba. La idea es que cada botón ejecute, al ser presionado, la función getURL que va variando de acuerdo a la suma reiterada de la variable "i".
En este caso:
http://www.google.com/1,
http://www.google.com/2,
http://www.google.com/3
...
...
http://www.google.com/10

La cuestión es que este código genera una única funcion para todos los botones. Todos terminan redirigiendo a la última instancia de la reiteración, es decir:
http://www.google.com/10

A todo esto, como dije antes, el getURL es solo una prueba, la intención es que estos ejecuten funciones más complejas. La programación de dichas funciones no es lo que me complica, sino su posibilidad de que se realicen automáticamente.

Me surge la pregunta si debería usar "programación orientada a objetos", que por lo poco que he leido sobre el tema, quizas sea la forma de solucionarlo. Lo cual sería pésimo para mi porque, no entiendo un comino de dicho paradigma.

Muchas gracias de antemano!
Saludos
  #2 (permalink)  
Antiguo 19/10/2010, 01:20
 
Fecha de Ingreso: septiembre-2009
Mensajes: 17
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Crear funciones dinámicamente con for() en AS2

como tú has dicho, se genera una única función y todos los botones te hacen lo mismo. Para evitarlo, puedes asignar a cada botón una función distinta, teniendo en cuenta su nombre, de esta manera:
Código:
for(i=1; i<10;i++){
	_root.attachMovie("mcBtnBase", "boton"+i, this.getNextHighestDepth());
	_root["boton"+i]._x = 10+i*40;
	_root["boton"+i]._y = 10+i*40;
	_root["boton"+i].texto.text = "Boton "+i;
	
        //aquí viene lo diferente
        _root["boton"+i].onRelease =function(){
       //partimos el nombre del botón para sabrer su número
       var partes = this._name.split("boton");
       //guardamos el número en una variable que usaremos como parámetro
       var parametro:String = partes[1];
       //generamos la url deseada;
       var laURL:String = "http://www.google.com/"+ parametro;
       //asignamos lo que tiene que hacer
	getURL(laURL);
	};
	
}
También otra opción es generar una sola función, pero que admita parámetros. Luego, en el onRelease del botón le envías un parámetro distinto, en función de su nombre o lo que quieras.

Espero que esto te dé alguna pista de cómo hacerlo
  #3 (permalink)  
Antiguo 19/10/2010, 08:35
 
Fecha de Ingreso: agosto-2010
Mensajes: 8
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Crear funciones dinámicamente con for() en AS2

Cita:
Iniciado por CidDeMizar Ver Mensaje
como tú has dicho, se genera una única función y todos los botones te hacen lo mismo. Para evitarlo, puedes asignar a cada botón una función distinta, teniendo en cuenta su nombre, de esta manera:
Código:
for(i=1; i<10;i++){
	_root.attachMovie("mcBtnBase", "boton"+i, this.getNextHighestDepth());
	_root["boton"+i]._x = 10+i*40;
	_root["boton"+i]._y = 10+i*40;
	_root["boton"+i].texto.text = "Boton "+i;
	
        //aquí viene lo diferente
        _root["boton"+i].onRelease =function(){
       //partimos el nombre del botón para sabrer su número
       var partes = this._name.split("boton");
       //guardamos el número en una variable que usaremos como parámetro
       var parametro:String = partes[1];
       //generamos la url deseada;
       var laURL:String = "http://www.google.com/"+ parametro;
       //asignamos lo que tiene que hacer
	getURL(laURL);
	};
	
}
También otra opción es generar una sola función, pero que admita parámetros. Luego, en el onRelease del botón le envías un parámetro distinto, en función de su nombre o lo que quieras.

Espero que esto te dé alguna pista de cómo hacerlo
EXELENTEEEEEEEEE!!!
Muchas gracias, la verdad llevaba bastante tiempo con esta cuestión y claramente, la posibilidad de crear funciones dinámicamente es una herramienta muy potente, por lo menos para mi.
De nuevo, muchas gracias!

Etiquetas: dinamicamente, dinamicas, for(), funciones, function, acciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:38.