flash特效原理 图片滑动放大效果 2

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

 flash特效原理:图片滑动放大效果(1) http://blog.csdn.net/hero82748274/archive/2009/10/22/4715312.aspx

 

   最近看了一些关于动态注册点更加的办法,顺手牵羊把他下载了,感觉挺好用。再把一个倒影类给下载了,结合上次一个做法,做了一个简单demo 。这一次,我们采用外部加载的办法来制作。这样更加合理的。鉴于这只是一个简单demo ,只是知道了原理就能够把握到的东西,所以这样只是希望讨论怎样优化这种效果。下面的一个代码是加了一点倒影类的影子,效果看起来很不错,至于性能就有待改进。在这里只是提出一种demo,如果有心人能够完善,也可以发表一下意见,共同完成这个事情。事不宜迟,讲解怎样外部导入多张图片。

我们不使用那些开源的类,内部类就可以简单解决这个问题。

 

 滑动

 

 

加载多张图片:Loader 是一个容器,可以加载外部的图片,但是多张图片的时候,我们就需要进行多次线性循环。计算多少个loader 装放我们的图片。下面采用一中不确定的像无限参数的形式来写。这种是一种偷懒的做法,所以不需要见怪,至于好不好见仁见智。为加载的容器安装两个监听器,如果出错就报告,完成了就去除一部分的监听,将加载到的内容,保存在数组里面。可以是Vector 也可以是Array. 在cs4两种都可以。鉴于图片数很少,所以这种做法也勉强的完成了加载外部图片的功能。

private function addImages(...args):void{}

 

 

[c-sharp] view plain copy print ?
  1. private function addImages(...args):void  
  2.         {  
  3.             count=args.length;  
  4.             for(var i:int=0;i<args.length;i++)  
  5.             {  
  6.               var loader:Loader=new Loader();  
  7.               loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);  
  8.               loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,onError);  
  9.               loader.load(new URLRequest(args[i]));  
  10.             }  
  11.         }  
  12.         private function onComplete(event:Event):void  
  13.         {  
  14.             var bitmap:Bitmap=event.currentTarget.content as Bitmap;  
  15.             imageList.push(bitmap);  
  16.             event.currentTarget.removeEventListener(Event.COMPLETE,onComplete);  
  17.             count--;  
  18.             if(count==0)  
  19.             {   
  20.                trace(imageList.length);  
  21.                createObj(imageList);  
  22.             }  
  23.               
  24.   
  25.         }  
  26.         private function onError(event:Event):void  
  27.         {  
  28.             throw new Error("路径错误");  
  29.         }  
private function addImages(...args):void  {   count=args.length;   for(var i:int=0;i<args.length;i++)   {     var loader:Loader=new Loader();     loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);     loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,onError);     loader.load(new URLRequest(args[i]));   }  }  private function onComplete(event:Event):void  {   var bitmap:Bitmap=event.currentTarget.content as Bitmap;   imageList.push(bitmap);   event.currentTarget.removeEventListener(Event.COMPLETE,onComplete);   count--;   if(count==0)   {       trace(imageList.length);      createObj(imageList);   }     }  private function onError(event:Event):void  {   throw new Error("路径错误");  }

 

 

完成之后,我们对图片使用容器安装,并且分布其位置。和其他交互等的设置。创建一些空白的影片剪辑容器,也有利于创建倒影效果。

[c-sharp] view plain copy print ?
  1. private function createObj(images:Array):void  
  2.         {  
  3.   
  4.             for (var i:uint=0; i<images.length; i++)  
  5.             {  
  6.                 var bit:MovieClip=new MovieClip();//空白影片剪辑                
  7.                 bit.addChild(images[i]);  
  8.                 bit.buttonMode=true;  
  9.                 bit.x=i*(bit.width+8);  
  10.                 bit.y=150;  
  11.                 var r1:Reflect = new Reflect({mc:bit, alpha:30, ratio:60, distance:0, updateTime:-1, reflectionDropoff:0});  
  12.                 array.push(bit);//数组管理  
  13.                 list.addChild(bit);//容器管理  
  14.                 Contain.RegPoint(bit,new Point(50,140));//重新更改注册点  
  15.                 bit.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);  
  16.             }  
  17.             stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler);  
  18.         }  
private function createObj(images:Array):void  {   for (var i:uint=0; i<images.length; i++)   {    var bit:MovieClip=new MovieClip();//空白影片剪辑        bit.addChild(images[i]);    bit.buttonMode=true;    bit.x=i*(bit.width+8);    bit.y=150;    var r1:Reflect = new Reflect({mc:bit, alpha:30, ratio:60, distance:0, updateTime:-1, reflectionDropoff:0});    array.push(bit);//数组管理    list.addChild(bit);//容器管理    Contain.RegPoint(bit,new Point(50,140));//重新更改注册点    bit.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);   }   stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler);  }

 

 

完成之后,我们还需要对其进行倒影设置,这次采用网上一些倒影类的做法,辅助我们完成这个功能

var r1:Reflect = new Reflect({mc:bit, alpha:30, ratio:60, distance:0, updateTime:-1, reflectionDropoff:0});

 

Reflect类就是一个倒影的类,在adobe 核心类库当中也存在的。效果也不错。第一个参数指定影片剪辑,第二是透明度,第三个显示的多少,第四个距离。其他是一个偏移等。日后有时间会补充这种讲解。

 

完成之后,也会发现这个类其实不一定适合我们这种效果,因为我们所做的并不是希望注册点在左上角,而是希望在其底部。这样会造成这个类本身设计一些缺陷,不得不最后设置他的位置。因此需要通过更改他的注册点,否则会看不到效果 

下面代码清单:

 

其中import com.image.RollPhoto;
      import com.image.Reflect;
      import com.image.tool.Contain;
  这一次和上次做法差不多,增加我们使用了Reflect 这个类。Contain类当中,有一个更加注册点的做法,来源于6DN的做法。效果很不错。拼合了就可以出现上面的图片效果。

 

总的代码:主要分为加载图片的部分,这一部分可以单独分开出去的。创建图片的部分,还有运算部分。

 

[c-sharp] view plain copy print ?
  1. package   
  2. {  
  3.     import flash.display.MovieClip;  
  4.     import flash.events.*;  
  5.     import flash.geom.*;  
  6.     import flash.system.*;  
  7.     import flash.text.*;  
  8.     import flash.display.BitmapData;  
  9.     import flash.display.Bitmap;  
  10.     import flash.display.DisplayObject;  
  11.     import flash.display.Loader;  
  12.     import flash.net.*;  
  13.     import com.image.RollPhoto;  
  14.     import com.image.Reflect;  
  15.     import com.image.tool.Contain;  
  16.        
  17.     public class Main extends MovieClip  
  18.     {  
  19.         private var array:Array= new Array();//用于管理的数组  
  20.         private var list:MovieClip=new MovieClip();//图片容器  
  21.         private var myphoto:RollPhoto;//图片滚动对象  
  22.         private var count:int=0;//图片加载的计数器  
  23.         private var imageList:Array=new Array();  
  24.         public function Main()  
  25.         {  
  26.             init();  
  27.         }  
  28.         private function init():void  
  29.         {  
  30.             myphoto=new RollPhoto(stage);//初始化对象  
  31.             myphoto.setPorperty(1.4,0.0025,8);//设置属性  
  32.             addEventListener(Event.ENTER_FRAME,Run);  
  33.             addImages("./image/1.png","./image/2.png","./image/3.png","./image/4.png","./image/5.png","./image/6.png","./image/7.png");//外部加载图片  
  34.             addChild(list);  
  35.             list.y=60;  
  36.             list.x=20;  
  37.                      
  38.         }  
  39.         //创建列表物体  
  40.         private function createObj(images:Array):void  
  41.         {  
  42.   
  43.             for (var i:uint=0; i<images.length; i++)  
  44.             {  
  45.                 var bit:MovieClip=new MovieClip();//空白影片剪辑                
  46.                 bit.addChild(images[i]);  
  47.                 bit.buttonMode=true;  
  48.                 bit.x=i*(bit.width+8);  
  49.                 bit.y=150;  
  50.                 var r1:Reflect = new Reflect({mc:bit, alpha:30, ratio:60, distance:0, updateTime:-1, reflectionDropoff:0});  
  51.                 array.push(bit);//数组管理  
  52.                 list.addChild(bit);//容器管理  
  53.                 Contain.RegPoint(bit,new Point(50,140));//重新更改注册点  
  54.                 bit.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);  
  55.             }  
  56.             stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler);  
  57.         }  
  58.           
  59.         private function Run(event:Event):void  
  60.         {  
  61.             memory.text=String(System.totalMemory/1024)+"/kb";//内存监控  
  62.         }  
  63.         private function mouseMoveHandler(e:MouseEvent):void  
  64.         {  
  65.             if (list.hitTestPoint(mouseX,mouseY) && mouseY<300)  
  66.             {  
  67.                 myphoto.ZoomX(array);//以x轴为例  
  68.             }  
  69.             else  
  70.             {  
  71.                 System.gc();  
  72.                 myphoto.Rest(array,"x");//复位  
  73.             }  
  74.         }  
  75.   
  76.         private function mouseDownHandler(event:MouseEvent):void  
  77.         {  
  78.             trace(event.currentTarget);  
  79.         }  
  80.         //加载外部图片  
  81.         private function addImages(...args):void  
  82.         {  
  83.             count=args.length;  
  84.             for(var i:int=0;i<args.length;i++)  
  85.             {  
  86.               var loader:Loader=new Loader();  
  87.               loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);  
  88.               loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,onError);  
  89.               loader.load(new URLRequest(args[i]));  
  90.             }  
  91.         }  
  92.         private function onComplete(event:Event):void  
  93.         {  
  94.             var bitmap:Bitmap=event.currentTarget.content as Bitmap;  
  95.             imageList.push(bitmap);  
  96.             event.currentTarget.removeEventListener(Event.COMPLETE,onComplete);  
  97.             count--;  
  98.             if(count==0)  
  99.             {   
  100.                trace(imageList.length);  
  101.                createObj(imageList);  
  102.             }  
  103.               
  104.   
  105.         }  
  106.         private function onError(event:Event):void  
  107.         {  
  108.             throw new Error("路径错误");  
  109.         }  
  110.   
  111.           
  112.     }  
  113. }  
package { import flash.display.MovieClip; import flash.events.*; import flash.geom.*; import flash.system.*; import flash.text.*; import flash.display.BitmapData; import flash.display.Bitmap; import flash.display.DisplayObject; import flash.display.Loader; import flash.net.*; import com.image.RollPhoto;    import com.image.Reflect; import com.image.tool.Contain;   public class Main extends MovieClip {  private var array:Array= new Array();//用于管理的数组  private var list:MovieClip=new MovieClip();//图片容器  private var myphoto:RollPhoto;//图片滚动对象  private var count:int=0;//图片加载的计数器  private var imageList:Array=new Array();  public function Main()  {   init();  }  private function init():void  {   myphoto=new RollPhoto(stage);//初始化对象   myphoto.setPorperty(1.4,0.0025,8);//设置属性   addEventListener(Event.ENTER_FRAME,Run);   addImages("./image/1.png","./image/2.png","./image/3.png","./image/4.png","./image/5.png","./image/6.png","./image/7.png");//外部加载图片      addChild(list);   list.y=60;   list.x=20;            }  //创建列表物体  private function createObj(images:Array):void  {   for (var i:uint=0; i<images.length; i++)   {    var bit:MovieClip=new MovieClip();//空白影片剪辑        bit.addChild(images[i]);    bit.buttonMode=true;    bit.x=i*(bit.width+8);    bit.y=150;    var r1:Reflect = new Reflect({mc:bit, alpha:30, ratio:60, distance:0, updateTime:-1, reflectionDropoff:0});    array.push(bit);//数组管理    list.addChild(bit);//容器管理    Contain.RegPoint(bit,new Point(50,140));//重新更改注册点    bit.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);   }   stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler);  }    private function Run(event:Event):void  {   memory.text=String(System.totalMemory/1024)+"/kb";//内存监控  }  private function mouseMoveHandler(e:MouseEvent):void  {   if (list.hitTestPoint(mouseX,mouseY) && mouseY<300)   {    myphoto.ZoomX(array);//以x轴为例   }   else   {    System.gc();    myphoto.Rest(array,"x");//复位   }  }  private function mouseDownHandler(event:MouseEvent):void  {   trace(event.currentTarget);  }  //加载外部图片  private function addImages(...args):void  {   count=args.length;   for(var i:int=0;i<args.length;i++)   {     var loader:Loader=new Loader();     loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);     loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,onError);     loader.load(new URLRequest(args[i]));   }  }  private function onComplete(event:Event):void  {   var bitmap:Bitmap=event.currentTarget.content as Bitmap;   imageList.push(bitmap);   event.currentTarget.removeEventListener(Event.COMPLETE,onComplete);   count--;   if(count==0)   {       trace(imageList.length);      createObj(imageList);   }     }  private function onError(event:Event):void  {   throw new Error("路径错误");  }   }}

 

 

 

 

 不足地方:

 

目前来讲,感觉到计算的效率并不是很理想。需要效果能够出来,但依旧希望有所提高。任何计算都需要付出代价。因为个人能力有限,只能日后如果能够想到就继续完善这种做法。可以对其代码进行修改,要是要更加好的做法 可以留言告诉我

 

下载地址:

 

下载地址请先点击进去:在这里头像

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值