Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/06/2010, 05:06
Jamlet
 
Fecha de Ingreso: mayo-2008
Mensajes: 163
Antigüedad: 16 años
Puntos: 1
Distorisión de clip (perspectiva)

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.



El código es este:

Código :

Código PHP:
Ver original
  1. // importamos las clases necesarias
  2. import flash.display.BitmapData;
  3. import flash.geom.Rectangle;
  4. import flash.geom.Point;
  5.  
  6. MovieClip.prototype.distorsionar = function(distorsionV:Number, distorsionH:Number) {
  7. var ancho:Number = Math.round(this._width);
  8. var alto:Number = Math.round(this._height);
  9. var transparent:Boolean = true;
  10. var fillColor:Number = 0x00000000;
  11. // objeto bitmapData donde almacenamos la info del clip a distorsionar
  12. var bitmap_1:BitmapData = new BitmapData(ancho, alto, transparent, fillColor);
  13. bitmap_1.draw(this);
  14. this._visible = false;
  15. distorsionado_mc.removeMovieClip();
  16. distorsionado2_mc.removeMovieClip();
  17. // clip donde crearemos la distorsión
  18. var contenedor:MovieClip = this._parent.createEmptyMovieClip("distorsionado_mc", this._parent.getNextHighestDepth(), {_x:this._x, _y:this._y});
  19. var contenedor2:MovieClip = this._parent.createEmptyMovieClip("distorsionado2_mc", this._parent.getNextHighestDepth(), {_x:this._x, _y:this._y});
  20. contenedor._x = this._x;
  21. contenedor._y = this._y;
  22. contenedor2._x = this._x;
  23. contenedor2._y = this._y;
  24. //Deformación horizontal
  25. for (var k:Number = 1; k<alto; k++) {
  26. var clip_temp:MovieClip = contenedor.createEmptyMovieClip("clip"+k, contenedor.getNextHighestDepth(), {_x:0, _y:k});
  27. clip_temp._y = k;
  28. var bitmap_temp:BitmapData = new BitmapData(ancho, 1);
  29. bitmap_temp.copyPixels(bitmap_1,new Rectangle(0, k, ancho, k),new Point(0, 0));
  30. clip_temp.attachBitmap(bitmap_temp,clip_temp.getNextHighestDepth(),"auto",true);
  31. clip_temp._xscale = ((k/(ancho-1))*(100-distorsionH))+distorsionH;
  32. clip_temp._x = (ancho-clip_temp._width)*0.5;
  33. }
  34.  
  35. bitmap_1.dispose();
  36. contenedor._visible = false;
  37.  
  38. var ancho2:Number = Math.round(contenedor._width);
  39. var alto2:Number = Math.round(contenedor._height);
  40. var bitmap_2:BitmapData = new BitmapData(ancho2, alto2, transparent, fillColor);
  41. bitmap_2.draw(contenedor);
  42.  
  43. //Deformación vertical
  44. for (var l:Number = 1; l<ancho; l++) {
  45. var clip_temp:MovieClip = contenedor2.createEmptyMovieClip("clip"+l, contenedor2.getNextHighestDepth(), {_x:l, _y:0});
  46. clip_temp._x = l;
  47. var bitmap_temp:BitmapData = new BitmapData(1, alto);
  48. bitmap_temp.copyPixels(bitmap_2,new Rectangle(l, 0, l, alto),new Point(0, 0));
  49. clip_temp.attachBitmap(bitmap_temp,clip_temp.getNextHighestDepth(),"auto",true);
  50. clip_temp._yscale = ((l/(alto-1))*(100-distorsionV))+distorsionV;
  51. clip_temp._y = (alto-clip_temp._height)*0.5;
  52. }
  53. // liberamos memoria
  54. bitmap_2.dispose();
  55. };
  56.  
  57. foto.miClip.loadMovie("pocoyo.jpg");
  58.  
  59. btn.onRelease = function(){
  60.     foto.distorsionar(50,50);
  61. }
  62. btn2.onRelease = function(){
  63.     foto.distorsionar(30,70);
  64. }

A ver si alguien puede echarme una mano. Gracias.