Noviembre 2005


Me he llevado una grata sorpresa al ojear la ayuda de flash 8. Se trata de la clase mx.transitions.TransitionManager, que permite trabajar con una serie de transiciones de una manera muy ágil. Supongo que casi todos los programadores, nos hemos imaginado, o tratado de implementar una clase de este tipo, que "encapsule" el comportamiento del conjunto de transiciones de nuestro repositorio. Pues bien, para aquellos que no lo han hecho todavía, Macromedia se les ha adelantado.

Editado: después del comentario de mi amigo manjeet, entiendo que este post, puede ser muy arduo sin un ejemplo. Aquí os pongo el resultado del código:




y el código.

Actionscript:
  1.  
  2. import mx.transitions.*;
  3. import mx.transitions.easing.*;
  4. var animador:TransitionManager = new TransitionManager(mc);
  5. // configuramos nuestros objetos de transiciones
  6. var objBlinds:Object = {type:Blinds, direction:Transition.IN, duration:2, easing:None.easeNone, numStrips:10, dimension:0};
  7. var objFadeTransition:Object = {type:Fade, direction:Transition.IN, duration:3, easing:None.easeNone};
  8. var objFlyTransition:Object = {type:Fly, direction:Transition.IN, duration:3, easing:Elastic.easeOut, startPoint:9};
  9. var objIrisTransition:Object = {type:Iris, direction:Transition.IN, duration:2, easing:Strong.easeOut, startPoint:5, shape:Iris.CIRCLE};
  10. var objPhotoTransition:Object = {type:Photo, direction:Transition.IN, duration:1, easing:None.easeNone};
  11. var objPixelTransition:Object = {type:PixelDissolve, direction:Transition.IN, duration:2, easing:None.easeNone, xSections:10, ySections:10};
  12. var objRotateTransition:Object = {type:Rotate, direction:Transition.IN, duration:3, easing:Strong.easeInOut, ccw:false, degrees:720};
  13. var objSqueezeTransition:Object = {type:Squeeze, direction:Transition.IN, duration:2, easing:Elastic.easeOut, dimension:1};
  14. var objWipeTransition:Object = {type:Wipe, direction:Transition.IN, duration:2, easing:Elastic.easeOut, startPoint:1};
  15. var objZoomTransition:Object = {type:Zoom, direction:Transition.IN, duration:2, easing:Elastic.easeOut};
  16. // rellenamos nuestro combo
  17. combo.addItem({data:objBlinds, label:"Blinds"});
  18. combo.addItem({data:objFadeTransition, label:"Fade"});
  19. combo.addItem({data:objFlyTransition, label:"Fly"});
  20. combo.addItem({data:objIrisTransition, label:"Iris"});
  21. combo.addItem({data:objPhotoTransition, label:"Photo"});
  22. combo.addItem({data:objPixelTransition, label:"PixelDissolve"});
  23. combo.addItem({data:objRotateTransition, label:"Rotate"});
  24. combo.addItem({data:objSqueezeTransition, label:"Squeeze"});
  25. combo.addItem({data:objWipeTransition, label:"Wipe"});
  26. combo.addItem({data:objZoomTransition, label:"Zoom"});
  27. // cargamos el evento change
  28. var obj:Object = new Object();
  29. obj.change = function(evt_obj:Object):Void  {
  30.         var seleccion:Object = evt_obj.target.selectedItem;
  31.         animador.startTransition(seleccion.data);
  32. };
  33. combo.addEventListener("change", obj);
  34. var obj2:Object = new Object();
  35. // cargamos el eveno
  36. obj2.allTransitionsInDone = function(eventObj:Object) {
  37.         trace("evento despachado, fin de la animación");
  38. };
  39. animador.addEventListener("allTransitionsInDone", obj2);
  40.  
  41.  

Visitando del.icio.us, un bookmark compartido, me ha saltado a la cara. Se trata de una librería que permite manipular un swf desde javascript, hasta el punto que (al menos eso afirma el autor) se puede acceder a todo el rango de posibilidades de flash sin tocar el ide.

La clase ExternalInterface del nuevo Flash 8 comienza a dar sus frutos. Por lo menos curioso.

[ ejemplo ]

[ AFLAX - JavaScript Library for Macromedia's Flash™ Platform ]

he mejorado el script del menú. Creo que me ha quedado más o menos decente, y como tenía bastante desangelado el index, pues lo he plantado ahí.

Lo podéis ver [ aqui ]

PD: se aceptan sugerencias, (alguien se atreve a inagurar los comentarios?) :S

Está basado en una vieja idea de un gestor de organigramas que hice hace tiempo. La espiral es "cuasi-aurea", puesto que si uso la progresión de fibonacci, apenas puedo mostrar 4 o 5 items.

Sigo con chorradas respecto a curvas en el día de los Difuntos. Resulta que ayer por la noche, viendo posesión infernal, una cebra zombi me tragó. Ahora escribo desde dentro de ella desde mi nuevo teclado inalámbrico

Estoy jugando con algunos experimentos de la api de dibujo. En el experimento que trataba de hacer, las curvas cambiaban en función de la velocidad del viento. Me he acordado del experimento de marcos que ví un día en los .fla de subflash y que me gustó bastante. Como tenía algo de código parecido, lo he reproducido. La verdad, es que resulta más fácil de lo que parece.
Cuando tenga un rato, lo comento y lo publico.

PD: cuando acabo cosas como estas, me digo... "los programadores del Medal of Honor se tienen que partir el culo leyendo estas chorradas " :D

[editado]

su código fuente:

Actionscript:
  1.  
  2. import flash.geom.Point;
  3. import mx.transitions.*;
  4. import mx.transitions.easing.*;
  5. // puntos de la goma
  6. var pinit:Point = new Point(50, 100);
  7. var pfin:Point = new Point(150, 100);
  8. // la goma se va a dibujar con un vertice
  9. var pVerticeCurva:Point = null;
  10. // dragger es  la cruz
  11. attachMovie("beizer", "dragger", 2);
  12. init();
  13. // crea el clip goma e inicializa la posicion del dragger y del enterFrame
  14. function init() {
  15.         var goma = _root.createEmptyMovieClip("goma", 1);
  16.         // este punto se podría introducir a mano
  17.         pVerticeCurva = new Point(Math.abs((pinit.x-pfin.x)/2)+pinit.x,
  18.                                                                 Math.abs((pinit.y-pfin.y)/2)+pinit.y);
  19.         // colocamos el dragger en el punto de la curva
  20.         _root["dragger"]._x = pVerticeCurva.x;
  21.         _root["dragger"]._y = pVerticeCurva.y;
  22.         goma.onEnterFrame = redibujar;
  23. }
  24. // dibuja la goma con los valores calculados
  25. function redibujar() {
  26.         with (goma) {
  27.                 clear();
  28.                 lineStyle(2, 0xc0c0c0, 100);
  29.                 moveTo(pinit.x, pinit.y);
  30.                 curveTo(_root["dragger"]._x, _root["dragger"]._y, pfin.x, pfin.y);
  31.         }
  32. }
  33. dragger.onPress = function() {
  34.         startDrag(this);
  35. };
  36. // cuando soltamos el dragger, movemos el punto de la curva...
  37. dragger.onRelease = dragger.onReleaseOutside=function () {
  38.         stopDrag();
  39.         new Tween(this, "_x", Elastic.easeOut, this._x, pVerticeCurva.x, 1, true);
  40.         new Tween(this, "_y", Elastic.easeOut, this._y, pVerticeCurva.y, 1, true);
  41. };
  42.