Pues sí, volviendo al AS2, pero sólo temporalmente.
Desde hace un par de días estoy trabajando en un banner que, por requisitos del cliente, tiene que estar publicado para Flash Player 8. En general, el desarrollo no es muy problemático, pero hay una tarea que requiere de una lógica algo más compleja.
Lo primero que quise hacer fue quitarme de en medio esta parte, y cómo lo importante era centrarme en el problema, me puse a picar código en AS3. En poco más de un día tenía solucionada dicha parte. Después de esto, he abierto un nuevo fla y me he puesto a programar el resto del banner y a migrar mis clases a AS2.
Pues bien, volver a AS2 está siendo una experiencia traumática. A pesar de llevar varios años programando en actionscript parezco un novato. Un breve resumen de las cosas que me están pasando…
Bienvenido al pasado
Abro mi fla y me dispongo a declarar el Document Class. Ah, es verdad, que eso es de CS3. Pues nada, abro el panel de acciones y creo mi clase:
new Main();
Abro FlashDevelop y creo una nueva clase AS2. Al generarme la estructura el programa, recuerdo que el package no se define, sino que se pone junto a la clase. Creo mi constructor, una función init (con el Void en mayúscula, que gracioso) y un trace para probar, compilo y todo bien (“Excelente, Smithers”).
La siguiente tarea titánica es… definir un enterFrame en mi método init. Pues bien, para esto he estado varios minutos. Empiezo con addEventLi… no no, es verdad, esto es de AS3. Escribo lo siguiente:
this.onEnterFrame = enterFrame;
Defino una función enterFrame con un trace de prueba. Esta vez no va. Miro la documentación porque ya no estoy ni seguro que se escriba onEnterFrame. Pues sí, está bien escrito, y en la documentación también lo implementa en el this… En vez de asociarlo a una función pruebo directamente a definir la función dentro del método. Tampoco va. Pensemos…
Al final caigo que en AS2 la clase principal no extiende de nada, por tanto el this hace referencia a un Object, no a un MovieClip. Vuelvo al fla y en la creación de Main paso una referencia del escenario, lo recojo en el constructor como root y ya puedo asociar mis eventos a este clip.
Este ha sido el round 1. A partir de ahí me he encallado en cosas como:
- intentar hacer un scroll y no conseguirlo, hasta darme cuenta que utilizaba y en vez de _y.
- tener que almacenar en un botón una referencia de la clase para poder acceder a ella en los eventos onPress y onRelease (de esto me acordaba xD)
- volverme loco al no conseguir acceder a un MovieClip en mi clase!! Al cabo de unos minutos he visto que tenía un problema de ámbito y he recordado a mi viejo amigo el Delegate (que ni recordaba en que paquete se encontraba, y mira que lo he utilizado veces…)
- enterarme (por las malas claro) que el método hitTestPoint es de AS3, y tener que implementar manualmente un sistema de colisiones.
- tener que reescribir una clase que funcionaba a base de Timers, y comprobar lo limitado que es el setInterval.
- volver al attachMovie (noooooooooo!!!!)
- y alguna más que me dejo en el tintero.
En fin, que hace falta experiencias de este tipo para valorar más que nunca AS3. Después de unos 10 meses tocando únicamente AS3, he vuelto a descubrir lo maravilloso que es el “method closure“, la gestión de eventos y, en general, la forma de trabajar. Incluso cosas como el Timer, que al principio me pareció más engorroso que el setInterval, ahora lo he echado de menos.
Por suerte para mí se trata de un banner y estaré 3 o 4 días, pero no me quiero ni imaginar lo que tiene que ser empezar un proyecto medio-grande con AS2. Si en mi curro me “enchufan” uno me cambio de agencia. Avisados están.
[…] en el artículo donde maldecía por tener que volver a AS2 me estaba refiriendo también a este banner (por cierto, para seguir rajando de AS2, sólo hay que […]