Vie 23 Dec 2005
Cuando desarrollé mi primer gran proyecto en Actionscript 2.0 con clases, la mayor parte de ellas contenÃan atributos estáticos "referencia" , o pasaba referencias como propiedad. ParecÃa que todo en flash perdÃa la referencia: enchufaba funciones a los onLoad de los parsers, y perdÃa la referencia, en los onClick de los botones perdÃa la referencia, los setInterval, venga a pasar referencias... parecÃa todos los eventos se habÃan aliado contra mÃ,
y eso que ya tenÃa callo con problemas de referencias.
Incluso sugerà en algún foro la idea de hacer un FAQ de referencias por ser un problema muy común entre gente interesada por aprender Actionscript.
Pero con Flash 7.2, apareció la clase Delegate.
Éste es un ejemplo de mis frustraciones: un tÃpico parser que simplemente visualiza un XML en un TextField en el que las referencias son todo problemas.
-
-
/**
-
* @author Alejanadro Sánchez Marcos
-
* @usage tutorial de uso de delegate en los parsers.
-
* la clase emula un parser básico y su uso común.
-
*/
-
class ParserTradicional {
-
public var xml:XML;
-
public var textoResultado:TextField;
-
// ouch!
-
public static var ruta:ParserTradicional;
-
public function ParserTradicional(URL:String, textoResultado:TextField) {
-
xml = new XML();
-
// off!
-
ruta = this;
-
this.textoResultado = textoResultado;
-
xml.load(URL);
-
// empiezan los problemas...
-
// xml.ruta = this; // ay!
-
xml.onLoad = parse;
-
}
-
public function parse() {
-
// no tengo ruta.. mmm meto un atributo estático con la ruta
-
// buff!
-
trace(ruta.xml);
-
ruta.mostrarXML();
-
}
-
public function mostrarXML() {
-
textoResultado.text = xml.toString();
-
}
-
}
-
-
-
y ésta es exactamente la misma clase, pero usando delegate.
-
-
import mx.utils.Delegate;
-
/**
-
* @author Alejanadro S�nchez Marcos
-
* @usage tutorial de uso de delegate en los parsers.
-
* la clase emula un parser básico y su uso común.
-
*/
-
class ParserDelegate {
-
public var xml:XML;
-
public var textoResultado:TextField;
-
public function ParserDelegate(URL:String, textoResultado:TextField) {
-
this.textoResultado = textoResultado;
-
xml = new XML();
-
xml.load(URL);
-
// yeeeha!
-
xml.onLoad = Delegate.create(this, parse);
-
}
-
public function parse(success:Boolean) {
-
if (success) {
-
mostrarXML();
-
}
-
}
-
public function mostrarXML() {
-
textoResultado.text = xml.toString();
-
}
-
}
-
-
[ enlaces relacionados: eventos y delegate en Actionscript 3.0 ]
Marzo 15th, 2006 at 5:31 am
muy buen articulo amigo… este era mi problema:
class CargadorImagenes
{
private function comenzarBucle():Void
{
setInterval(f_bucle,100);
}
private function f_bucle():Void
{
trace(”f_bucle…”);
}
}
lo solucione asi:
private function comenzarBucle():Void
{
this.bucle_id
= setInterval(Delegate.create(this, f_bucle),100);
}
Sencillo, muchas gracias…
Marzo 29th, 2006 at 10:37 pm
Hola amigo:
quizas no sea el lugar para publicar mi duda pero lo que pasa es que trabajo con Macromedia Flex 1.5 y recibo datos de una clase java, la cual me pasa una objeto tipo String que viene con el formato de un XML, yo lo quiero asignar a model y para eso tengo que convertirlo a XML comolo puedo hacer???
gracias por tu ayuda
Marzo 30th, 2006 at 11:25 am
hola luis, te recomiendo que para dudas como estas, uses el foro de subflash.
http://www.subflash.com.
Allà habrá gente que te podrá resolver dudas concretas.
De todos modos, para convertir tipos de datos, hay unas funciones en Actionscript que funcionan como conversores de tipos. Las funciones se llaman como el tipo de datos destino y reciben como argumento el tipo a convertir (ej)
miNumero = Number(miString)
Pero ya te digo que en el foro podrás tener más info.
saludos!
Agosto 31st, 2006 at 3:44 pm
Tengo que hacer un glosario sobre un campo especializado y, como quiero ser la más original (la mayorÃa de mis compis tienen ahora 21 tacos y no veÃan La Bola de Cristal), he decidido hacerlo sobre términos electroduendes (mentecátodo, pelabaudios, galvanoplástico).
Me pregunto si me podÃas mandar un correo a la dirección mdmv@alu.ua.es diciéndome si controlas el tema para consultarte algunos términos. Gracias.
Diciembre 23rd, 2006 at 7:48 am
esta clase salvo mi proyecto, cada ves me queda mas clara, si no tuviese tanto sueño me pondrÃa a programar XD
Febrero 1st, 2007 at 1:22 pm
Hola, tengo una duda, resulta que estoy usando la clase tween pero quiero en ella hacer como variable la parte a la llamada de las clases como ejemplo quiero poner una variable en la parte de Elastic, pero no sé como hacer la sintaxis.
La pregunta es: ¿como puedo referenciar como variable una ruta de clase?
Gracias
(Ricardo= zogocho
Febrero 1st, 2007 at 2:44 pm
ya lo encontre, de todos modos dejo la solucion aqui adentro:
var miObjeto:Object = new Object
miObjeto = mx.transitions.easing.Elastic.easeOut
new Tween(peliDeDatos, “_xscale”, miObjeto, peliDeDatos._xscale, escala, 3, true);
new Tween(peliDeDatos, “_yscale”, miObjeto, peliDeDatos._yscale, escala, 3, true);
Lo que hice fue crear un objeto contenedor de la ruta el cual lo podemos cambiar a gusto
Junio 7th, 2007 at 9:54 pm
Gracias, realmente me sirvio… lo que yo hacia para solvar esto… y daun poco de verguenza pero bue.. hacia una nueva clase qeu extiende de XML y le ponia un atributo de la clase qeu lo queria llamar, y despues cuando lo instanciaba le seteaba a ese atributo, this, entonces desde mi clase extendida podia hablar con la que la habia instanciado… pero esto es realmente muy bueno.
Miles de gracias!!