Home » AS2 »AS3 »Flash »POO » Currently Reading:

El uso correcto de Actionscript 2.0

noviembre 11, 2007 AS2, AS3, Flash, POO 28 Comments
El uso correcto de Actionscript 2.0

Desde que salió Flash CS y ActionScript 3.0 que han habido numerosas quejas de gente que opina que Actionscript 3 es muy diferente a Actionscript 2 y que no entiende por que Adobe ha realizado este cambio tan brusco que se está dejando fuera (según ellos) a mucha gente.

Se han oido muchas opiniones de gente que dice que continuará trabajando en Actionscript 2 por que ven muy complejo Actionscript 3. Freddie hace poco escribió un articulo sobre esta cuestión. Sobre que Actionscript 2 aún tiene mercado y que no es necesario el cambio a Actionscript 3. Es cierto que aun hay tiempo para hacer esta transición pero la pregunta es:

¿Realmente la transición se está haciendo de Actionscript 2 a Actionscript 3? o en realidad se está pretendiendo hacer de Actionscript 1 a Actionscript 3.

El problema es que NO se sabe programar correctamente Actionscript 2. Mucha gente cree saber programar en Actionscript 2 únicamente por utilizar MovieClipLoader o cualquier otra clase introducida para FlashPlayer 7, o simplemente por utilizar Flash 8 y seleccionar “Publicar para Actionscript 2.0” al crear la película. Pero en realidad siguen programando al estilo Actionscript_1.

Actionscript 2.0 lo introdujo Flash Mx 2004 hace más de tres años. Freddie escribió un tutorial mostrando las novedades que traía. Si nos fijamos en la última veremos que dice que Actionscript 2.0 introduce la programación orientada a objetos, y ese es el punto clave.

Flash Mx 2004 y Flash 8 permitieron combinar código de Actionscript 1 junto a código de Actionscript 2 haciendo que fuese más leve el paso de un lenguaje a otro. Permitiendo que gente que no quisiese aprender a programar orientado a objetos pudiese seguir programar como antes aprovechando las funciones que traía la versión 2. Pero esto a llevado al error de mucha gente que cree saber programar en Actionscript 2 cuando no es cierto, o por lo menos no saben hacerlo correctamente.

Hace unos días penHolder escribió un =http://www.cristalab.com/tipsTip[/url] y me pidió mi opinión. Le dije de debía escribirlo con programación orientada a objetos.

Antes de seguir he de decir que NO estoy criticando a penHoder ni diciendo que sea mal programador, su código es correcto y funciona perfectamente, pero es el último tip de AS2 y es un ejemplo que muestra claramente a lo que me refiero (sorry penHolder)

El ejemplo al que me refiero es este, y el código que utiliza es este:

  1. this.createEmptyMovieClip("botonera", this.getNextHighestDepth());
  2. var labels:Array = Array("home", "about", "services", "contact");
  3. with (botonera) {
  4. this._x = 50;
  5. for (i = 1; i <= labels.length; i++) {
  6. var modelButton:MovieClip = this.attachMovie("boton", "boton" + i, this.getNextHighestDepth());
  7. modelButton._x = 0;
  8. modelButton._y = ((i * 0) + this._height) + 5;
  9. modelButton.t.text = labels[i - 1];
  10. modelButton.onEnterFrame = function()
  11. {
  12. this._alpha += (this.a - this._alpha) / this.v;
  13. if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
  14. this.a = 50;
  15. this.v = 5;
  16. } else {
  17. this.a = 100;
  18. this.v = 10;
  19. }
  20. };
  21. modelButton.onMouseDown = function()
  22. {
  23. if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
  24. if (this._name == "boton1") {
  25. trace("welcome home");
  26. }
  27. if (this._name == "boton2") {
  28. trace("about us");
  29. }
  30. if (this._name == "boton3") {
  31. trace("our services");
  32. }
  33. if (this._name == "boton4") {
  34. trace("contact us");
  35. }
  36. }
  37. };
  38. }
  39. }

Creado en Flash 8 y publicado para Actionscript 2, siendo este el resultado:

Ejemplo publicado para AS2

El ejemplo funciona perfectamente, Pero ¿Realmente esto es un ejemplo de código creado para Actionscript 2?

Hagamos una prueba:
Eliminemos del código la asignación de tipo de las variables. Osea donde pone var labels:Array dejaremos var labels y donde pone var modelButton:MovieClip dejaremos var modelButton, quedando así el código:

  1. this.createEmptyMovieClip("botonera", this.getNextHighestDepth());
  2. var labels = Array("home", "about", "services", "contact");
  3. with (botonera) {
  4. this._x = 50;
  5. for (i = 1; i <= labels.length; i++) {
  6. var modelButton = this.attachMovie("boton", "boton" + i, this.getNextHighestDepth());
  7. modelButton._x = 0;
  8. modelButton._y = ((i * 0) + this._height) + 5;
  9. modelButton.t.text = labels[i - 1];
  10. modelButton.onEnterFrame = function()
  11. {
  12. this._alpha += (this.a - this._alpha) / this.v;
  13. if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
  14. this.a = 50;
  15. this.v = 5;
  16. } else {
  17. this.a = 100;
  18. this.v = 10;
  19. }
  20. };
  21. modelButton.onMouseDown = function()
  22. {
  23. if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
  24. if (this._name == "boton1") {
  25. trace("welcome home");
  26. }
  27. if (this._name == "boton2") {
  28. trace("about us");
  29. }
  30. if (this._name == "boton3") {
  31. trace("our services");
  32. }
  33. if (this._name == "boton4") {
  34. trace("contact us");
  35. }
  36. }
  37. };
  38. }
  39. }

En opciones de publicación seleccionemos FlashPlayer 7 y Actionscrip 1.

Comprobemos el resultado:

Ejemplo publicado para AS1

Vayamos más lejos. Eliminemos el método getNextHighestDepth() y dejemos un valor fijo, por ejemplo 1. Ahora publiquemos la pelicula para FlashPlayer 6:

Ejemplo publicado para AS1 y FlashPlayer 6 desde Flash MX

Nota: Para esta última publicación he utilizado Macromedia Flash MX. Versión de Flash que salió al mercado a principios del 2002, más de un año y medio antes de que apareciese Actionscript 2…

Cómo vemos el resultado es el mismo. Es decir, este ejemplo es 99.8% código Actionscript 1.

Entonces… ¿Podemos considerar el código como Actionscript 2 únicamente por añadir el tipo de datos a dos Arrays? Evidentemente NO. Podremos utilizar una o varias funciones propias de Actionscript 2 pero seguiremos programando en Actionscript 1.

Cómo he dicho antes Actionscript 2 introduce la programación orientada a objetos y esa es la única manera de programar correctamente Actionscript 2.

Veamos el ejemplo escrito con programación orientada a objetos
Tampoco me voy a extender mucho en explicar este código, solo diré que utilizaremos dos objetos, uno que será la botonera que a su vez creará los objetos de los botones necesarios. Así que tendremos dos clases:
Botonera.as

  1. class Botonera
  2. {
  3. private var _ruta:MovieClip;
  4. private var _clip:MovieClip;
  5. private var _vinculo:String;
  6. private var _botones:Array = new Array();
  7. private var _labels:Array = new Array();
  8. private var _acciones:Function;
  9. private var _x:Number;
  10. private var _y:Number;
  11. private var _distanciaY:Number;
  12. public function Botonera(ruta:MovieClip, vinculo:String, labels:Array, acciones:Function, x:Number, y:Number, distanciaY:Number)
  13. {
  14. _x = x;
  15. _y = y;
  16. _distanciaY = distanciaY;
  17. _ruta = ruta;
  18. _vinculo = vinculo;
  19. _labels = labels;
  20. _acciones = acciones;
  21. creaBotonera();
  22. }
  23. private function creaBotonera()
  24. {
  25. _clip = _ruta.createEmptyMovieClip("botonera", _ruta.getNextHighestDepth());
  26. _clip._x = _x;
  27. _clip._y = _y;
  28. var total = _labels.length;
  29. for (var i:Number = 1; i <= total; i++) {
  30. creaBoton(_labels[i - 1],i);
  31. }
  32. }
  33. private function creaBoton(label:String, id:Number):Void
  34. {
  35. var boton:Boton = new Boton(_clip, _vinculo, label, _acciones, _distanciaY, id);
  36. _botones.push(boton);
  37. }
  38. }
Boton.as
  1. import mx.transitions.Tween;
  2. import mx.transitions.easing.*;
  3. import mx.utils.Delegate;
  4. //
  5. class Boton
  6. {
  7. private var _ruta:MovieClip;
  8. private var _clip:MovieClip;
  9. private var _vinculo:String;
  10. private var _label:String;
  11. private var _accion:Function;
  12. private var _distanciaY:Number;
  13. private var _id:Number;public function Boton(ruta:MovieClip, vinculo:String, label:String, accion:Function, distanciaY:Number, id:Number)
  14. {
  15. _ruta = ruta;
  16. _vinculo = vinculo;
  17. _label = label;
  18. _accion = accion;
  19. _distanciaY = distanciaY;
  20. _id = id;
  21. creaBoton();
  22. }
  23. private function creaBoton():Void
  24. {
  25. _clip = _ruta.attachMovie(_vinculo, _vinculo + _id, _ruta.getNextHighestDepth());
  26. _clip.t.text = _label;
  27. _clip._x = 0;
  28. _clip._y = (_id - 1) * (_clip._height + _distanciaY);
  29. _clip.boton = _id;
  30. _clip.accion = _accion;
  31. _clip.onRelease = Delegate.create(this, mouse_down);
  32. _clip.onRollOver = Delegate.create(this, mouse_over);
  33. _clip.onRollOut = Delegate.create(this, mouse_out);
  34. }
  35. private function mouse_down():Void
  36. {
  37. _accion(this._id);
  38. }
  39. private function mouse_over():Void
  40. {
  41. var alfa:Tween = new Tween(_clip, "_alpha", Regular.easeIn, 100, 50, 5, false);
  42. }
  43. private function mouse_out():Void
  44. {
  45. var alfa:Tween = new Tween(_clip, "_alpha", Regular.easeIn, 50, 100, 5, false);
  46. }
  47. }

Y en el .fla tendremos esto:

  1. var labels:Array = new Array("home", "about", "services", "contact");
  2. var botonera:Botonera = new Botonera(this, "Boton", labels, acciones, 50, 20, 5);function acciones(boton)
  3. {
  4. if (boton == 1) {
  5. trace("welcome home");
  6. }
  7. if (boton == 2) {
  8. trace("about us");
  9. }
  10. if (boton == 3) {
  11. trace("our services");
  12. }
  13. if (boton == 4) {
  14. trace("contact us");
  15. }
  16. }

Resultado:

AS2 con POO

Evidentemente este código ahora es imposible publicarlo desde Actionscript 1, es un código orientado a objetos con lo que es un código 100% Actionscript 2.

Ahora pasemos el ejemplo a Actionscript 3
Seguiremos teniendo dos objetos, botonera y botón.

Botonera.as
  1. package
  2. {
  3. import flash.display.Sprite;
  4. import flash.utils.getDefinitionByName;
  5. //
  6. public class Botonera extends Sprite
  7. {
  8. private var _ruta:Sprite;
  9. private var _clip:Sprite;
  10. private var _vinculo:String;
  11. private var _botones:Array = new Array();
  12. private var _labels:Array = new Array();
  13. private var _acciones:Function;
  14. private var _x:Number;
  15. private var _y:Number;
  16. private var _distanciaY:Number;
  17. public function Botonera(ruta:Sprite, vinculo:String, labels:Array, acciones:Function, x:Number, y:Number, distanciaY:Number)
  18. {
  19. _x = x;
  20. _y = y;
  21. _distanciaY = distanciaY;
  22. _ruta = ruta;
  23. _vinculo = vinculo;
  24. _labels = labels;
  25. _acciones = acciones;
  26. creaBotonera();
  27. }
  28. private function creaBotonera():void
  29. {
  30. _clip = new Sprite();
  31. _clip.x = _x;
  32. _clip.y = _y;
  33. var total:uint = _labels.length;
  34. for (var i:uint = 1; i <= total; i++) {
  35. creaBoton(_labels[i - 1],i);
  36. }
  37. addChild(_clip);
  38. }
  39. private function creaBoton(label:String, id:Number):void
  40. {
  41. var ClassReference:Class = getDefinitionByName(_vinculo) as Class;
  42. var boton:Sprite = new ClassReference(_clip, label, _acciones, _distanciaY, id) as Sprite
  43. _clip.addChild(boton);
  44. }
  45. }
  46. }
Boton.as
  1. package
  2. {
  3. import flash.display.Sprite;
  4. import flash.text.TextField;
  5. import flash.events.MouseEvent;
  6. import fl.transitions.*;
  7. import fl.transitions.easing.*;
  8. //
  9. public class Boton extends Sprite
  10. {
  11. private var _ruta:Sprite;
  12. private var _clip:Sprite;
  13. private var _label:String;
  14. private var _accion:Function;
  15. private var _distanciaY:uint;
  16. private var _id:uint;
  17. public function Boton(ruta:Sprite, label:String, accion:Function, distanciaY:uint, id:uint)
  18. {
  19. _ruta = ruta;
  20. _label = label;
  21. _accion = accion;
  22. _distanciaY = distanciaY;
  23. _id = id;
  24. creaBoton();
  25. }
  26. private function creaBoton()
  27. {
  28. var texto = getChildByName("t");
  29. texto.text = _label;
  30. x = 0;
  31. y = (_id - 1) * (height + _distanciaY);
  32. addEventListener(MouseEvent.MOUSE_DOWN, mouse_down);
  33. addEventListener(MouseEvent.ROLL_OVER, mouse_over);
  34. addEventListener(MouseEvent.ROLL_OUT, mouse_out);
  35. }
  36. private function mouse_down(e:MouseEvent):void
  37. {
  38. _accion(this._id);
  39. }
  40. private function mouse_over(e:MouseEvent):void
  41. {
  42. var alfa:Tween = new Tween(this, "alpha", Regular.easeIn, 1, 0.5, 5, false);
  43. }
  44. private function mouse_out(e:MouseEvent):void
  45. {
  46. var alfa:Tween = new Tween(this, "alpha", Regular.easeIn, 0.5, 1, 5, false);
  47. }
  48. }
  49. }

Y en el .fla:

  1. var labels:Array = new Array("home", "about", "services", "contact");
  2. var botonera:Botonera = new Botonera(this, "Boton", labels, acciones, 50, 20, 5);
  3. addChild(botonera);function acciones(boton)
  4. {
  5. if (boton == 1) {
  6. trace("welcome home");
  7. }
  8. if (boton == 2) {
  9. trace("about us");
  10. }
  11. if (boton == 3) {
  12. trace("our services");
  13. }
  14. if (boton == 4) {
  15. trace("contact us");
  16. }
  17. }


Ejemplo en Actionscript 3

Evidentemente Actionscript 3 introduce cambios respecto a Actionscript 2, elimina funciones e introduce otras. No utilizaremos attachMovie utilizaremos addChild, no utilizaremos métodos en clip, utilizaremos listeners. etc… Pero los cambios son MÍNIMOS. La base sigue siendo la misma, una programación orientada a objetos.

Conclusión:
Únicamente comparen los códigos… ¿Realmente creemos que ha cambiado tanto Actionscript_3 respecto a Actionscript 2? o es que en realidad no sabemos programar bien Actionscript_2 y aun estamos con Actionscript_1…

Compártelo:

El uso correcto de Actionscript 2.0
Visto 75.797 veces

Currently there are "28 comments" on this Article:

  1. MPC dice:

    Desgraciadamente hay muchísimos programadores que no saben programar orientado a objetos, bien sea en Java, en .NET, en ActionScript o en cualquier otro lenguaje orientado a objetos.

  2. MPC dice:

    Ah por cierto! Con el ejemplo que has utilizado la gente que no sabe programación orientada a objetos lo único que verá es que con ese paradigma tiene que escribir muchísimo más código. Lo digo por experiencia. La gente no suele ver las bondades de la programación orientada a objetos. Solo se quedan con que es muchos más laborioso, complicado y tedioso.

    Te animo a que utilices este ejemplo para mostrar las maravillas de la reutilización de código a través de la programación orientada a objetos.

  3. Rafeo dice:

    Buenos ejemplos zguillez. Otra razón más para utilizar AS3 ;).

  4. alfathenus dice:

    Totalmente de acuerdo con vos.

    Incluso hay gente que dice que no hace falta programar con clases, que las clases no sirven (claro ejemplo q ni idea tienen de OOP si hablan de trabajar con clases y no con objetos….).

    En estos días alguno me pregunta si esta bien q se bajen en flash 5 para empezar a usar el flash (WTF!!), o si se puede utilizar código de flash4 en flash cs3…. es increible….

    Por favor… hay que hacer que flashkit elimine todos los códigos anteriores a flash 7…

  5. Dembert dice:

    Muy buena aclaracion

  6. Celso dice:

    Hola,

    Es un buen tutorial,

    He estado reapasandolo, sobre todo porque me interesa el tema de llamar a otro script por getDefinitionByName, y al copiar exactamente tu ejemplo, este no me funciona, cuando realiza la bussqueda de la clase Boton, me indica que la variable Boton no esta definida.

    ¿alguna idea?

  7. Puto dice:

    De verdad muy buen ejemplo yo creo que si siempre vemos que los demas hacen o dejan de hacer nos perjudica, preocupemonos por nuestros desarrollos y asi mejoraremos..

    Saludos

  8. Alan dice:

    Celso: deberías editar el linkage del movieclip boton, asignándole la clase Boton.

  9. Diego dice:

    Estoy trabajando en un proyecto que intuyo requiere este modo de programación y relamente me interesa conocerlo, pero

    de dónde me “bajo” ‘flash.display.Sprite’?

    El error que me arroja flash es: “The class or interface ‘flash.display.Sprite’ could not be loaded.” [entro otros].

    Saludos!

  10. zguillez dice:

    @Diego: No te lo has de “bajar” de ningún lado. Únicamente has de realizar el import de la clase al principio de la clase.

    import flash.display.Sprite;

    Mira el código completo.

  11. joel dice:

    completamente de acuerdo.

  12. david dice:

    Excelente ejemplo :)

    Disfruto y aprendo un montón con tu blog.

    Saludos y gracias mil,

    David

  13. JuniHH dice:

    Sobre actionscript 3 aun no he dado el paso por el tipo de trabajo que hacemos en la oficina, donde perfectamente el AS2 hace el desempeño que necesitamos sin problemas consecuentes de que un cliente o visitante no puede ver un sitio por no tener instalado el plug-in del 9.

    Hay un punto que reprocho en el articulo de Freddie: Un 91% de las computadoras del mundo ya tienen el player 9.

    Puede que ese valor sea correcto, pero si ese valor lo da Adobe… entonces es falso. Recordemos que las empresas para darse mas meritos mercadologicos inventan noticias y estoy seguro que las computadoras con el player 9 no llegan al 60%.

    Ese valor lo digo por las politicas economicas que se viven en muchos paises latinos, donde comprar una computadora es casi prohibitivo, politica que desafortunadamente abunda en mi pais Republica Dominicana.

    En tu caso y especificamente sobre la version AS2 en base al original de penHolder, lo unico que hiciste fue crear una clase a la que basicamente le añadiste las clases Transition y Delegate, lo que no lo convierte en un script 100% AS2, cosa que si sucede con la version en AS3.

    En lo personal no todo el tiempo trabajo con clases, a menos que sea un site donde una misma funcion la necesite innumerables veces. Solo en ese caso trabajo con clases creadas por mi y las de AS2, el resto del tiempo prefiero usar prototypes dentro del FLA… y eso no me hace un editor de solo AS1, si no necesito mas de lo que este me da. Aunque me vale aclarar que me identifico plenamente sobre lo que dices de trabajar 100% en AS2, clases y orientacion a objeto.

    Creo que todo depende de como sera la implementacion del proyecto. Por ultimo, aunque escribo AS2, no soy programador, aprendi ese lenguaje por la coyuntura del empleo que actualmente tengo.

  14. Crocodilo dice:

    De hecho no hace falta programar poo para programar as3…

  15. Uno cualquiera dice:

    Este es un link que puede ser interesante
    para esta discusión, no siempre la manera correcta de hacer las cosas es la más eficiente, depende siempre de la situación.
    http://theflashblog.com/?p=334.

    Un saludo

  16. Franco dice:

    Genial tutorial 10 puntos.

  17. GisKaRD dice:

    Hola, me remito a lo que comento MPC, yo no se si estoy programanco en as 1.0 o en 2.0 me da igual la cuestion es que para el uso que le doy me funciona perfectamente y no tengo que escribir tantas lineas de codigo, todo depende del tipo de programacion que hagas y para que, de todas maneras en as 1.0/2.0 puedes reutilizar = mente el codigo sin tener que matarte con tantas lineas es mas si no tenemos pensado reutilizar un codigo porque tenemos que programar con poo 100%?ademas de que se pierde mas tiempo y es mas tedioso y aburrido, prefiero el codigo de penHolder 100 veces antes que el mismo ejemplo en POO siempre y cuando la idea no sea la de reutilizarlo con frecuencia, yo soy de los que piensa que la magia de flash se perdio en el momento que empezo a orientarse estrictamete a la POO, asi que de momento no me interesa para nada as3.0 a no ser que me ofrezca algo que necesite hacer y no pueda con as1.0/2.0 que por cierto que para mi el codigo de penHolder es as2.0 aunque no utilizase la poo de forma estricta ya que as2.0 no es significativo de POO, como bien se a dicho as2.0 introducio la poo con nuevas clases y tal pero que pasa que porque utilices solo algunas clases de as2.0 no quiere decir que estes programando en as2.0 o simplemente que no estas programando en poo estrictamente?
    en fin mi opinion es que seguire programando en as1.0 con clases de 2.0 como dicen por ahi hasta la muerte o que el plugin no lo soporte.
    que le den a addChild a los listeners, al scope, al alpha = 1 o 0 y su puta madre
    que yo me quedo con mi simple
    this.onEnterFrame = function(){
    }

  18. El Glasso dice:

    Muchas gracias! Los no-programadores (soy diseñador) a los que nos gusta hacer las cosas bien agradecemos la aclaración. Es difícil comprender del todo las implicancias del cambio de AS1/2 a AS3 cuando uno no tiene un panorama amplio de los paradigmas de programación.

    Supongo que extrañaré lo intuitivo de AS1/2, pero seguro se aprecia la mejora en el rendimiento, que en los programadores que saben, se nota y mucho.

    Un abrazo!

  19. RUth dice:

    Hola, llegue a este foro presisamente buscando tips de POO xq aun no entiendo bien el asunto. se que necesito constructores destructores, sin embargo aun no he tenido el tiempo suficiente para adentrarme en ese universo.

    Soy nueva usando AS 3.0 y quisiera poder reusar ciertos codigos que quisiera aplicar a diferentes movie clips, sin embargo luego de varios dias de sufrimiento aun no consigo entender como puedo pasar un movie clip por parametro.

    si bien puedo crear

    funcion equis (elmovie:MovieClip) {
    /* lo que sea q quiera hacer con “elmovie” */
    }

    no se como hacer referencia a esa funcion cuando quiero aplicar esa funcion a varios movieClips

    me explico si ya he creado una instancia de movieclip instancia y lo llamo

    equis (instancia); // funciona perfectamente

    pero estoy tando de crear varios movieClip de forma dinamica

    for (var i:Number = 0; i < 10; i++) {
    var contenedor:MovieClip = new MovieClip();
    contenedor.name = btns_name[i];
    addChild(contenedor);
    }

    luego trato de llamar la funcion

    var NewMovie:MovieClip = new MovieClip();
    NewMovie = getChildByName(btns_name[x]);
    equis (NewMovie);

    y me da error, obviamente no estoy entendiendo la forma de trabajar con objetos (en este caso MovieClip), podrias por favor orientarme

    muchas gracias de antemano, te escribo por que se nota que eres experto en el tema y ojala tengas algo de tiempo para echarme una manito.

  20. Dario Pacheco dice:

    La programación orientada a objetos es la mejor forma de ahorrar líneas de código, a través de las técnicas de encapsulación, herencia, abstracción, reutilización, polimorfismo. Sin embargo yo recomendaría antes de aprender AS2 o AS3, es aprender la POO en java que es una forma más clara de entenderla y una vez entendido esos conceptos se puede aplicar en AS.

  21. Guru dice:

    Te dire que tu codigo, es bueno, pero tienes bastantes lineas de mas.Asi que tu tampoco sacas el jugo al action sctipt.

    PD. NO ESTOY CRITICANDO, SOLO DIGO LO QUE ES.

  22. Guru dice:

    Hay maneras mas sencilla, la cosa no es complicarse, sino que sea limpio. No digo q sea complejo. Pero la mejor alternativa es siempre un código limpio y corto.

    PD. NO ESTOY CRITICANDO, SOLO DIGO LO QUE ES.

  23. pedrox10 dice:

    No se el de arriba por que hace tanto lío por el codigo todos ya saben que el ejemplo es bueno y no solo basta con criticar si no con demostrar!! no sera que tienes envidia Guru?

  24. DarkSoul dice:

    Hola, yo realmente soy consiente que infrinjo un “error” en la forma correcta de programar en as2 (POO) y precisamente por ello tengo dificulatades con as3, de hecho he sido empirico en la programacion y hasta ahora he tomado la desicion de cambiar a as3. La verdad estaba en la posicion de GisKaRD quien menciono casarse con as2 a no ser de que el as3 le mostrase algo mejor. Pues bien mi queirdo amigo GisKaRD, el ejemplo mas simple que puedo darte y que me hizo cambiar de parecer es que en as3 puedes hacer animaciones en 3D y puesto que mas que programador soy un animador… vaya que es buen punto para empezar a cambiar a as3!! no lo crees?. ademas tengo entendido, me corrigen si no es cierto, que las conexiones a bases de datos, con as3 se realizan de forma directa sin necesidad de usar PHP. es cierto eso? de ser asi, seria otra razon poderosa para realizar el cambio a as3 en mi caso.

  25. ElGuiaCiego dice:

    Cuando me inicie en la programación hace ya incontables años con el “código maldito” el mítico C++ mis maestros me recomendaron, me instaron e incluso me AMENASARON para que utilizara siempre OOP. Hoy veo el porque, el código es reutilizable, no solo en proyectos sino entre plataformas Win Linux Mac. Tiempo que inviertes en fragmentar el código lo ganas al reutilizarlo (si lo hiciste bien no modificaras las clases). Y trabajando en equipo es absolutamente necesario (“cada loco con su clase”). Pero quizás lo mas importante de todo, aprender a programar requiere tiempo, si aprendes a programar BIEN en cualquier lenguaje, aprenderás a programar en todos.

  26. Anthony Martinez dice:

    disculpa como podria CONVERTIR este codigo AS3 a AS2?

    boton4_mc.buttonMode = true;

    boton4_mc.addEventListener(MouseEvent.ROLL_OVER, SobreMi);
    boton4_mc.addEventListener(MouseEvent.ROLL_OUT, FueraMi);

    function SobreMi(event:MouseEvent):void{
    {
    boton4_mc.gotoAndPlay(“SobreMi”);
    }

    function FueraMi(event:MouseEvent):void{
    {
    boton4_mc.gotoAndPlay(“FueraMi”);
    }

  27. lllllllll dice:

    como puedo hacer para que un boton haga dos acciones, digamos que pare un sonido y valla a otra escena?????

  28. firoh dice:

    que patada en los huevos acabo de recibir, XD apenas retomo flash desde hace años, y el primero que tuve fue el MX que me lo paso mi tío en CD.
    Como bien dices quitando los Array y los listeners, lo que estoy aprendiendo a programar es 98% as1 -_-U

    El hecho es que se POO y no OOP(por que OOP son las siglas en ingles)de aver echado un ojo a java,
    es decir se crear clases y constructores de clase, establecer variables funciones y metodos para reutilizar el código por medio de las clases heredadas, pero tal vez aprendemos y usamos mal as2 y 3 por una simple cuestión, vagueza. Si si, pensamos(y yo soy el primero) que para crear pequeñas APP o juegos podemos saltarnos la creación de clases y tirar un código allá donde nos parezca… XD
    POO no es solo un lenguaje orientado a objetos, sino un lenguaje bien estructurado, donde a la larga, la buena práctica nos ahorrará no solo tiempo de programación, sino que además nos ahorrará mucho mas tiempo a la hora de modificar los códigos. Por que nuestra programación de AS puede parecer programación de Arrays XD alguien sabe para que sirven los public private y protected en las variables y funciones de clases? yo no podría decir que si, y hacer uso de mis códigos =/
    Por cierto recuerdo que soy noob, apenas llevo una semana de leer y someter a prueba y error casi todo lo que me encuentro.Soy soy diseñador gráfico 3D, lo muy poco que se de java es algo de estructura, encapsulando códigos en unity3D, pero cada día me apasiona más programar y conozco un poquito mas, es un mundo de opciones con un horizonte casi infinito de posibilidades y mi curiosidad espero que no acabe por matarme jeje, pero ya digo, siendo diseñador gráfico autodidacta me fué muy fácil.Programación es mi contrapunto. Me tuve que leer los conceptos de clases en 5 libros diferentes, sobre Csharp y Java para comenzar a quitarme las legañas y medio abrir los ojos. Ahora que lo veo algo mas claro quiero un compilador externo para crear mis codigos y meter mis .fla a una carpeta a acompañar a sus amigos bien creados =)
    PD: este post me pareció de lo más interesante. Muchas gracias por aclararme algo que me llevaba preguntando un tiempo =) you rock! espero no haber aburrido con el comment ^^U

Comment on this Article:








Twitter: zguillez

AdvertisementAdvertisementAdvertisementAdvertisement

Recibe las novedades por email

Post destacado

Acceder a MovieClips de la librería dinámicamente en AS3

22 feb 2013

Hace tiempo que no escribo un tip de Actionscript 3, así que les dejo unas líneas de código sobre una pregunta que justo me hicieron en FB. ¿Cómo acceder a un MovieClip de la librería generendo dinámicamente el nombre? Para colocar un elemento de la librería en el Stage únicamente hemos de hacer un addChild de la clase que le hemos asociado en la librería: var cuadro:MovieClip = new cuadro(); addChild( cuadro ); En el caso de querer acceder al clip de forma dinámica ya que, por ejemplo, tenemos varios clips con los nombre: cuadro1, cuadro2, cuadro3, etc.., deberemos utilizar …



Map

Ranking

Codigoactionscript.org: 4.65 sobre 5 (106 valoraciones)

twitter-widget.com