http://www.tutoriales-flash.com/tutorial.asp?id_tuto=35
En base a ese ejemplo hice una pequeña modificacion en la funcion para poder pasarles los valores que quiero.
Por ahora funciona perfectamente siempre y cuando no se distorsione horizontalmente, es decir,
siempre que ArrIzqX sea igual a AbaIzqX y ArrDerX sea igual a AbaDerX. (Bueno, aunque sean diferentes funcionara, pero no distorsionara horizontalmente).
Archivo Prueba.fla (Este archivo debe contener un movieclip exportado para AS al primer frame con "Bandera" como identificador.)
Código :
#include "Distorsion.as"
this.createEmptyMovieClip("mcCuadro1".toString() , 1);
mcCuadro1.createEmptyMovieClip("Imagen1", 100);
mcCuadro1.Imagen1.attachMovie("Bandera", "IMG", 101);
var esquinas:Array = [100,100,300,100,100,100,300,300];
this.onEnterFrame = function()
{
esquinas[0] += 1;
esquinas[1] += 2;
esquinas[5] += 4;
mcCuadro1.Imagen1.distorsionar(esquinas);
}
Archivo Distorsion.as
Código :
import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Point;
MovieClip.prototype.distorsionar = function(esquinas:Array)
{
var ArrIzqX:Number = esquinas[0]; var ArrIzqY:Number = esquinas[1];
var ArrDerX:Number = esquinas[2]; var ArrDerY:Number = esquinas[3];
var AbaIzqX:Number = esquinas[4]; var AbaIzqY:Number = esquinas[5];
var AbaDerX:Number = esquinas[6]; var AbaDerY:Number = esquinas[7];
var ancho:Number = Math.round(this._width);
var alto:Number = Math.round(this._height);
var distorsionDerV:Number = (AbaDerY - ArrDerY) / ancho * 100;
var distorsionIzqV:Number = (AbaIzqY - ArrIzqY) / ancho * 100;
var bitmap_1:BitmapData = new BitmapData(ancho, alto, transparent, fillColor);
bitmap_1.draw(this);
this._visible = false;
distorsionado_mc.removeMovieClip();
var contenedor:MovieClip = this._parent.createEmptyMovieClip("distorsionado_mc", this._parent.getNextHighestDepth(), {_x:this._x, _y:this._y});
contenedor._x = esquinas[0];
contenedor._y = esquinas[1];
for (var k:Number = 1; k<ancho; k++)
{
var clip_temp:MovieClip = contenedor.createEmptyMovieClip("clip"+k, contenedor.getNextHighestDepth(), {_x:k, _y:0});
clip_temp._x = k;
var bitmap_temp:BitmapData = new BitmapData(1, alto);
bitmap_temp.copyPixels(bitmap_1,new Rectangle(k, 0, k, alto),new Point(0, 0));
clip_temp.attachBitmap(bitmap_temp,clip_temp.getNextHighestDepth(),"auto",true);
clip_temp._yscale = ((k / (ancho - 1)) * (distorsionDerV - distorsionIzqV)) + distorsionIzqV;
clip_temp._y = (k / (ancho - 1)) * (ArrDerY - ArrIzqY) + ArrIzqY;
}
bitmap_1.dispose();
};Si lo probais, vereis que dejan una "estela", además de la ralentizacion que genera.
La pregunta es:
¿Como podria eliminar la estela y la ralentizacion?
Un saludo.
