En la tercera versión ActionScript (AS3) nos encontramos con que muchas de las funciones a las que estábamos acostumbrados ya no están o han cambiado. Una de ellas es el attachMovie. Para quien no lo sepa, el attachMovie te permitía traer elementos de la biblioteca de tu SWF (previamente exportados con un "id") en tiempo de ejecución al escenario. Lo que daba la posibilidad de cargar objetos pasándole como argumento una variable. Por ejemplo :
Código :
var linkageName:String = "clip";
_root.attachMovie(linkageName, "nuevoNombre", 42);
"clip" es un objeto de la biblioteca con ese nombre de exportación
En AS3, el sustituto natural es addChild, el cual requiere un objeto instanciado de una clase, y es más, ahora al exportar en la biblioteca no le damos un "id", sino una clase (Class), por lo que ya no podemos pasarle una variable a un constructor. Esto NO funcionaría :
Código :
var linkageName:String = "objetoExportado";
var objetoInstanciado:Object = new linkageName();
Para solucionar esto tenemos el método getDefinitionByName() (del paquete flash.utils). El nuevo código quedaría así :
Código :
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.utils.getDefinitionByName;
var ClassReference:Class = getDefinitionByName("objetoExportado") as Class;
var instance:Object = new ClassReference();
addChild(DisplayObject(instance));
"objetoExportado" es un objeto de la biblioteca exportado con esa clase
Ahora nos surge un problema, y es que en AS2 podíamos hacer un attachMovie a un objeto de un SWF cargado dinámicamente, por ejemplo :
Código :
_root.contenedor.loadMovie("objetos.swf");
function test() {
clearInterval(idset);
_root.contenedor.attachMovie("objetoExportado","nuevoNombre",666);
};
//El setInterval sólo es para esperar a que cargue el objetos.swf
// En local la carga es casi instantánea y 3 segundos es más que suficiente,
// en la web deberías de esperar a que se cargase al 100% con métodos como el MovieClipLoader
idset = setInterval(test,3000);
"objetoExportado" es un objeto de la biblioteca con ese nombre de exportación que está en objetos.swf. Desde OTRO swf cargamos objetos.swf
Si probamos el código anterior de AS3, nos dará como resultado que la variable "objetoExportado" no está definida, y es que getDefinitionByName, sólo funciona cuando el objeto exportado está en el mismo SWF. Para solucionar esto, tenemos que usar getDefinition (la cual ya no es un método del paquete flash.utils, si no que se pierde entre las propiedades y métodos de los loaders, displaysObjects y demas)
Código :
import flash.display.*;
import flash.net.URLRequest;
var ldr:Loader = new Loader();
var url:String = "objetos.swf";
var urlReq:URLRequest = new URLRequest(url);
ldr.load(urlReq);
addChild(ldr);
function prueba(){
clearInterval(idset);
var clase:Class = ldr.contentLoaderInfo.applicationDomain.getDefinition("objetoExportado") as Class;
var mc = new clase();
this.addChild(mc);
}
// el setInterval vuelve a ser para asegurarse de que el objetos.swf está cargado
//En local funciona, en la web habría que esperarse a que cargara al 100% por otros métodos.
idset = setInterval(prueba,3000);
"objetoExportado" es un objeto de la biblioteca exportado con esa clase que está en objetos.swf. Desde OTRO swf cargamos objetos.swf
Gracias conejo, en mi rancho aún usamos AS2, creo que ya es tiempo de unirnos a la civilización. Por:bicho_O_blog
ya ta bien de tanto cambio y tanta ostia (parafraseando al por muchos queridos calico electronico).
Cuando no has terminado de aprender a usar AS2 cogen y te lo cambian todo de nuevas con AS3...a ver cuando sacan un AS que este en condiciones y no te vengan con tanta historia ni tanto cambio, porque a mi ya me tienen aburrio, cuando aprendes a hacer algo te viene una nueva version y tienes que empezar de cero
un punto a adobe por hacer el dia a dia un poco mas tortuoso Por:noctam_blog
Tengo entendido que AS3 no utiliza botones o algo así alguién me lo explica?
P.D. para NOCTAM_BLOG: Viva Cálico, sí señor Por:nestorrente
nestorrente, lo que no necesitas en AS3 es los Movie Clips, porque ahora existe un tipo de objetos llamados "Sprites". Para dejartelo facil, vendría a ser un Movie Clip sin animación, como el tipo "Grafico" en la libreria.
Es recomendado usarlos, porque es mucho más rapido instanciar un Sprite dinamicamente que un Movie Clip. Ademas, con un Sprite no cargas en memoria toda una linea de tiempo, como si lo harías con un Movie Clip. Por:Freddie
Es decir... que a efectos de cargar algo dinámicamente ya no es necesario usar los MovieClips. Simplemente debemos dejar éstos para las animaciones no? Por:martinpulido_blog
Exactamente martinpulido. Esa es la idea.
Ahora claro, si vas a cargar dinamicamente una animación, pues usas Movie Clips Por:Freddie
Para dejartelo facil, vendría a ser un Movie Clip sin animación, como el tipo "Grafico" en la libreria.
Ya, pero ¿como se dibujan a mano (no por código) los sprites?, porque la biblioteca sólo admites mcs, gráficos (sin vinculación) y buttons Por cierto, a qué viene lo de complicarse tanto la vida. Si tengo un clip con una clase llamada square:
Código :
var sq=addChild(new square());
sq.x=100;
sq.y=200;
Por:zah_blog
Qué complicado la hicieron esta vez. Yo estaba empezando con Flex el otro día. Carlos R. me decía que no me ofuscara, claro el tipo es un genio de las RIA's, qué facil es decirlo. Quise hacer una ventanita y poder hacer drag. Estuve 3 horas y no me salió.
pd: alguien me pasa alguna referencia de AS3 y como usarlo en Flex? Por:Dave73_blog
Dave73_blog en www.flex.org en la parte izquierda inferior de la pagina hay unos link a unos pdf que hablan del tema, lo que se de flex lo aprendi de esos pdf [en ingles], y en un dia logre hacer eso que no pudiste en 3 horas y mas, date una vueltecita por ahi y hechale el vistazo.
saludos Por:Sandy_blog
Aquí está la referencia de todo AS3: http://livedocs.macromedia.com/flex/2/langref/ Por:Zah
¡¡Sencillamente engorroso!!
Puede que este lo hagan en pro de hacer a flash y el AS3 cada vez mas Orientado a objetos y Orientado a Servicio, pero se les olvida que con tanta versión, lo único que se logra es hacer que todas las personas que algun dia nos enamoramos de flash desertemos por que deja la sensación de tener una plataforma inestable. Si pensaran mas como Ingenieros y menos como programadores los desarrolladores en Adobe, tendrían un proyecto con políticas claras que esten en pro de nosotros los consumidores y que si en últimas se mejora una versión, sea consecuente con las anteriores y por último si los cambios son extremos como en este caso, sea paralelo a una campaña educativa (no solo comercial), creo que así se pierde muchas cosas que venian evolucionando en flash y el AS. Por:vanvanero_blog
Uhh no saben cuanto se los agradezco chicos! Por:dave73_blog
vanvanero puedes seguir usando AS2, pero AS3 es así porque DEBE DE SER ASÍ. Ahora por fin AS3 empieza a ser un lenguaje "serio" Por:_CONEJO
Me sumo a la gente que reniega de seguir aprendiendo cientos de lineas de codigo nuevo para hacer lo mismo que haciamos antes con menos. Todo esto de agrandar el codigo no es porque AS mejor, es por que en los cuarteles de Adobe/Macromedia o quien quiera que los compre despues, se les paga a los programadores por linea de codigo desarrollada.... en fin tal como lo Anticipo Negroponte: Vamos en pos de tener pcs gordas y lentas, debido a tanto codigo que desvirtua la idea original de un web liviano y rapido. A esto sumemos que hay que volver a aprender todo de nuevo.... lamentablemente malo para una herramienta que hasta sin una linea de codigo en AS hace maravillas. Mi humilde opinión, PBL Por:pbl
BulkTranslator de pbl Me duele el cambio y aprender cosas nuevas aunque no tenga idea si son para bien o para mal. ¡¡No quiero más dolor!!
Hay psicologos buenos que puedes encontrar por las paginas amarillas. Por:Freddie
Para todos los AS3-escépticos, prueben a colocar este código (sí, sí el mismo, hay cosas que no cambian ) en flash 8 y en flash 9, cambiando el valor de la variable n a ver que resultados obtienen:
Código :
function primos(n) {
var numbers:Array = new Array();
var rotos:Number;
for (var i:Number = 1; i<=n; i++) {
for (var j:Number = 0; j<numbers.length; j++) {
if (i%numbers[j] != 0) {
rotos++;
} else {
break;
}
}
if (rotos == numbers.length) {
numbers.push(i);
}
rotos = 0;
}
return numbers;
}
var n:Number = 25000;
trace(primos(n));
trace("Se han hallado los números primos hasta "+n+" en "+(getTimer()/1000)+" segundos");
Con flash 8 tarda algo más de 10 segundos para n=25000 y da error para n=35000. Con flash 9, tarda 1 segundo y no da error hasta n=110000 pd: a ver si alguien puede optimizar esto. Por:Zah
Me sumo a la corriente simplificadora. Para cuando un browser ajax enabled? Por:Paulo_blog
oye, po na a aprendé ...
eso sí,por preguntar,que no lo he probado:¿se pueden meter trozos e as 2 en as3 con alguna function()?
jo, aun no he aprendido as2, tengo 9 exámenes y las profesoras vienen con la cafeina por las nubes al ponernos exámenes y... TOMA AS3 PA´TU CUERPO!!
padre nuestro, que no estas en macromedia, salva a los lusers que intentan aprender flash y a los novatos en as3,... :s Por:apache 2.0_blog
Un lenguaje serio es un lenguaje complicado renovado con tan poco margen de tiempo que solo perdiendo horas y horas de tu vida personal, puedes llegar a dedicarte a tu pasion y trabajo??
pregunto...
Prefiero un lenguaje divertido, donde una vez aprendido, disfrute inventando, creando, y de vez en cuando pueda ver la luz del sol. No te permiten ser creativo, no te dan tiempo para disfrutar programando. Por:usER_blog
usER_blog :
No te permiten ser creativo, no te dan tiempo para disfrutar programando.
No te obligan a usarlo. Si te parece complicado y no disfrutas con él, envía un mensaje a los creadores de tal lenguaje no usándolo. Por:Freddie
usER_blog :
No te permiten ser creativo, no te dan tiempo para disfrutar programando.
Con AS3 se amplian las posibilidades de Flash, por ejemplo un VNC, un emulador de C64, un "Messenger", y estoy hablando de los primeros ejemplos que han visto la luz (si, todas esas cosas existen y funcionan). Si eso no te abre las puertas para ser creativo... no sé que lo hará. Por:_CONEJO
He estado trabajando con display objects containers, pero tengo un problema con display list, como puedo evitar el reparent de los display objects cuando hago un nuevo addchild pero en diferente scope al original?? Por:adlinkas_blog
Se han hallado los números primos hasta 25000 en 27.299 segundos
Se han hallado los números primos hasta 25000 en 0.785 segundos
impresionante Por:jaimoco_blog
Hola. Comencé a usar flash cuando salió, porque era la única manera de tener un control razonable de la diagramación y era también razonablemente sencillo de utilizar siendo diseñador. Adobe, que fue siempre una empresa dedicada al desarrollo de herramientas para diseño, edición, fotografía, etc., compra una herramiente accesible a los diseñadores y la transforma en algo críptico y complejo, fuera del alcance de un diseñador. Esto no es de ninguna manera un avance sino al contrario un claro retroceso. Avanzar seria hacer una herramienta tan potente y rápida como lo es el nuevo flash, pero con mayor secillez de uso que las versiones anteriores. Por:Gabio_blog
El que PUDO aprender AS2 PUEDE aprender también AS3, y si no QUIERE puede seguir usando AS2 (En flash 9), entonces:
Porque tantas quejas? Por:Karacas_blog
Yo creo que por fin AS3 es un lenguaje de programación en condiciones, sólo pido una cosa un manual en condiciones y que cuando salga el 4 q no lo cambien... desde luego as3 es impresionante Por:Agof_blog
Buena idea el uso del método getDefinitionByName() para sustituir el attachMovie, pero el attachMovie nos daba también el nuevo nombre y la profundidad, ¿donde están ahora?.
Salu2
`8¬]
Juan Muro Por:Juan Muro-blog
actionScript 3.0 es un lenguaje mucho más completo más sofisticado, con muchas más funcionalidades que as2 no tenía y un orden lógico mas estricto, quizas el problema es,o te subes al coche o te dejamos en el camino porque as2 un dia dejará de estar en lso foros o por lo menos kedara tan rezagado como un jubilado sin aumento de sueldo(nose si exagero), vale la pena ir aprendiendo, yo soy diseñador y recien me vengo relacionando con as y tengo menos de un año en esto y aunque quizas el cerebro demore en asimilar esto del codigo (entender como diablos la computadora construye realidades y su lenguaje simples y complejos a la vez, en sus mil lenguas) lo principal es tener la lógica base y de ahi empujar el coche e ir adelante y ayudarnos de los viejos lobos de la programación como Freddy, ZGullez, Conejo... etc, etc... como dicen gotoAndLearn();
y otros clabs y el resto del mundo...
pues animos y aprendan as3, flash siempre fue técnico y lo seguira siendo... Por:MrG-blog
ActionScript 3.0 TIENE MUCHAS MAS OPCIONES Y FUNCIONALIDADES NUEVAS, SIN ENVARGO TODO LO BUENO CUESTA TRABAJO APRENDER PERO SE QUE ESTA LO VALE, ASI QUE DEJE DE QUEJARSE Y PONGANSE A APRENDER AS 3.0 Por:ANGEKO-blog
La clave de la renovacion no esta en lo sencillo que sea de aprender y quedarse con eso porque lo nuevo nos cuesta...
De ser asi todavia estariamos usando ruedas cuadradas por lo dificil de hacerlas redondas..
Mi opinion es que si te metes a programar en un lenguaje determinado, lo debes hacer en forma seria, con la idea de aprender lo que contiene, con sus ventajas y desventajas, y luego de una evaluacion decides si es en lo cual te especializaras.
La critica no pasa por si es mas o menos dificil de aprender, sino que pasa por las ventajas y mejoras con respecto a la o las versiones anteriores.
En este caso AS3 las tiene de sobra.
Y la clave de la web no es solamente que sea liviano y sencillo...como dijo alguien en este post.. sino que lo mas importante es que sea robusto y confiable a todas o la mayoria de las pruebas y test a los que sea puesto.
Y lo mejor en este caso es la programacion OOP pura.. y AS3 se esta acercando a esta
Saludos Por:pulento
Algo que no entiendo.
¿No es más facil hacer...?
Código :
var Nuevo:ObjetoExportado=new ObjetoExportado();
addChild(Nuevo);
¿NO es más simple? o tiene desventajas? Por:JaLeRu
que locura!!! no creo que sea un avance dejar a un 80% de los usuarios de Flash en pañales con este nuevo lenguaje, es un verdadero retroceso, osea attachMovie es mucho mas simple y funcional, a ver como hacemos para adaptarnos a los nuevos tiempo, que desastre!!! Por:jabarua
Totalmente de acuerdo, jabarua. A mi me huele a la clásica estrategia del cambio de compañía. En cuanto Adobe ha engullido a Macromedia (que por algo llegó donde llegó solita), quieren reinventar la pólvora.
Ya todos sabemos que flash 8 trabajaba por dentro con clases, pero ¿que tengamos que hacerlo nosotros también lo hace mejor?... más robusto quizás, sí, pero conozco dibujantes buenísimos que antes eran capaces de comprender algo de as2, lo cual multiplicaba su potencial como animadores y creadores de contendio multimedia y ahora pasan de meterse en el berengenal de as3. Ahora flash se convertirá en un entorno excluyente, cuando el mérito que tuvo fué precisamente que nunca excluyó a nadie, ahora, cada vez más, es para programadores sin puñetero sentido estético.
Otra vez la obsolescencia programada. Por:Pludo-blog