Comunidad de diseño web y desarrollo en internet online

Distorisión de clip (perspectiva)

Citar            
MensajeEscrito el 09 Jun 2010 11:44 am
Trabajando en ActionScript 2 y partiendo del tutorial de "Tutoriales Flash" he conseguido distorsionar un clip para que parezca que está en perspectiva pero tengo dos pequeños problemas. El primero es que la imagen sale curvada y no sé por qué. Y el segundo es que por la parte de abajo se recortan las esquinas.

[img]http://yfrog.com/5jcurvadoj[/img]

El código es este:

Código ActionScript :

// importamos las clases necesarias
import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Point;

MovieClip.prototype.distorsionar = function(distorsionV:Number, distorsionH:Number) {
var ancho:Number = Math.round(this._width);
var alto:Number = Math.round(this._height);
var transparent:Boolean = true;
var fillColor:Number = 0x00000000;
// objeto bitmapData donde almacenamos la info del clip a distorsionar
var bitmap_1:BitmapData = new BitmapData(ancho, alto, transparent, fillColor);
bitmap_1.draw(this);
this._visible = false;
distorsionado_mc.removeMovieClip();
distorsionado2_mc.removeMovieClip();
// clip donde crearemos la distorsión
var contenedor:MovieClip = this._parent.createEmptyMovieClip("distorsionado_mc", this._parent.getNextHighestDepth(), {_x:this._x, _y:this._y});
var contenedor2:MovieClip = this._parent.createEmptyMovieClip("distorsionado2_mc", this._parent.getNextHighestDepth(), {_x:this._x, _y:this._y});
contenedor._x = this._x;
contenedor._y = this._y;
contenedor2._x = this._x;
contenedor2._y = this._y;
//Deformación horizontal
for (var k:Number = 1; k<alto; k++) {
var clip_temp:MovieClip = contenedor.createEmptyMovieClip("clip"+k, contenedor.getNextHighestDepth(), {_x:0, _y:k});
clip_temp._y = k;
var bitmap_temp:BitmapData = new BitmapData(ancho, 1);
bitmap_temp.copyPixels(bitmap_1,new Rectangle(0, k, ancho, k),new Point(0, 0));
clip_temp.attachBitmap(bitmap_temp,clip_temp.getNextHighestDepth(),"auto",true);
clip_temp._xscale = ((k/(ancho-1))*(100-distorsionH))+distorsionH;
clip_temp._x = (ancho-clip_temp._width)*0.5;
}

bitmap_1.dispose();
contenedor._visible = false;

var ancho2:Number = Math.round(contenedor._width);
var alto2:Number = Math.round(contenedor._height);
var bitmap_2:BitmapData = new BitmapData(ancho2, alto2, transparent, fillColor);
bitmap_2.draw(contenedor);

//Deformación vertical
for (var l:Number = 1; l<ancho; l++) {
var clip_temp:MovieClip = contenedor2.createEmptyMovieClip("clip"+l, contenedor2.getNextHighestDepth(), {_x:l, _y:0});
clip_temp._x = l;
var bitmap_temp:BitmapData = new BitmapData(1, alto);
bitmap_temp.copyPixels(bitmap_2,new Rectangle(l, 0, l, alto),new Point(0, 0));
clip_temp.attachBitmap(bitmap_temp,clip_temp.getNextHighestDepth(),"auto",true);
clip_temp._yscale = ((l/(alto-1))*(100-distorsionV))+distorsionV;
clip_temp._y = (alto-clip_temp._height)*0.5;
}
// liberamos memoria
bitmap_2.dispose();
};

foto.miClip.loadMovie("pocoyo.jpg");

btn.onRelease = function(){
   foto.distorsionar(50,50);
}
btn2.onRelease = function(){
   foto.distorsionar(30,70);
}



A ver si alguien puede echarme una mano. Gracias.

Por Jamlet

5 de clabLevel



 

msie8
Citar            
MensajeEscrito el 09 Jun 2010 11:56 am
No sé editar el mensaje y he visto que la imagen no aparece. La pongo aquí.

Por Jamlet

5 de clabLevel



 

msie8
Citar            
MensajeEscrito el 05 Jun 2011 02:54 pm
Algo asi te parece bien??

Código ActionScript :

import flash.display.BitmapData; 
import flash.geom.Rectangle; 
import flash.geom.Point; 
 
MovieClip.prototype.distorsionar = function(distorsionV:Number, distorsionH:Number) { 
var ancho:Number = Math.round(this._width); 
var alto:Number = Math.round(this._height); 
var transparent:Boolean = true; 
var fillColor:Number = 0x00000000; 
var escalaMayor:Number = 2 + ((ancho>=alto)? ancho : alto);
// objeto bitmapData donde almacenamos la info del clip a distorsionar 
var bitmap_1:BitmapData = new BitmapData(ancho, alto, transparent, fillColor); 
bitmap_1.draw(this); 
this._visible = false; 
distorsionado_mc.removeMovieClip(); 
distorsionado2_mc.removeMovieClip(); 
// clip donde crearemos la distorsión 
var contenedor:MovieClip = this._parent.createEmptyMovieClip("distorsionado_mc", this._parent.getNextHighestDepth(), {_x:this._x, _y:this._y}); 
var contenedor2:MovieClip = this._parent.createEmptyMovieClip("distorsionado2_mc", this._parent.getNextHighestDepth(), {_x:this._x, _y:this._y}); 
contenedor._x = this._x; 
contenedor._y = this._y; 
contenedor2._x = this._x; 
contenedor2._y = this._y; 
//Deformación horizontal 
for (var k:Number = 0; k< escalaMayor; k++) { 
var clip_temp:MovieClip = contenedor.createEmptyMovieClip("clip"+k, contenedor.getNextHighestDepth(), {_x:0, _y:k}); 
clip_temp._y = k; 
var bitmap_temp:BitmapData = new BitmapData(ancho, 1); 
bitmap_temp.copyPixels(bitmap_1,new Rectangle(0, k, ancho, 1),new Point(0, 0)); 
clip_temp.attachBitmap(bitmap_temp,clip_temp.getNextHighestDepth(),"auto",true); 
clip_temp._xscale = (((k)/(escalaMayor))*(100-distorsionH))+distorsionH; 
clip_temp._x = (ancho-clip_temp._width)*0.5; 
} 
 
bitmap_1.dispose(); 
contenedor._visible = false; 
 
var ancho2:Number = Math.round(contenedor._width); 
var alto2:Number = Math.round(contenedor._height); 
var bitmap_2:BitmapData = new BitmapData(ancho2, alto2, transparent, fillColor); 
bitmap_2.draw(contenedor); 
 
//Deformación vertical 
for (var l:Number = 0; (l<escalaMayor); l++) { 
var clip_temp:MovieClip = contenedor2.createEmptyMovieClip("clip"+l, contenedor2.getNextHighestDepth(), {_x:l, _y:0}); 
clip_temp._x = l; 
var bitmap_temp:BitmapData = new BitmapData(1, alto); 
bitmap_temp.copyPixels(bitmap_2,new Rectangle(l, 0, 1, alto),new Point(0, 0)); 
clip_temp.attachBitmap(bitmap_temp,clip_temp.getNextHighestDepth(),"auto",true); 
clip_temp._yscale = (((l)/(escalaMayor))*(100-distorsionV))+distorsionV; 
clip_temp._y = (alto-clip_temp._height)*0.5; 
} 
// liberamos memoria 
bitmap_2.dispose(); 
}; 
 
foto.miClip.loadMovie("pocoyo.jpg"); 
 
btn.onRelease = function(){ 
   foto.distorsionar(50,50); 
} 
btn2.onRelease = function(){ 
   foto.distorsionar(30,70); 
}

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.