flash特效原理:图片滑动放大效果(2)
?flash特效原理:圖片滑動(dòng)放大效果(1) http://blog.csdn.net/hero82748274/archive/2009/10/22/4715312.aspx
?? 最近看了一些關(guān)于動(dòng)態(tài)注冊(cè)點(diǎn)更加的辦法,順手牽羊把他下載了,感覺(jué)挺好用。再把一個(gè)倒影類給下載了,結(jié)合上次一個(gè)做法,做了一個(gè)簡(jiǎn)單demo 。這一次,我們采用外部加載的辦法來(lái)制作。這樣更加合理的。鑒于這只是一個(gè)簡(jiǎn)單demo ,只是知道了原理就能夠把握到的東西,所以這樣只是希望討論怎樣優(yōu)化這種效果。下面的一個(gè)代碼是加了一點(diǎn)倒影類的影子,效果看起來(lái)很不錯(cuò),至于性能就有待改進(jìn)。在這里只是提出一種demo,如果有心人能夠完善,也可以發(fā)表一下意見(jiàn),共同完成這個(gè)事情。事不宜遲,講解怎樣外部導(dǎo)入多張圖片。
我們不使用那些開(kāi)源的類,內(nèi)部類就可以簡(jiǎn)單解決這個(gè)問(wèn)題。
?
加載多張圖片:Loader 是一個(gè)容器,可以加載外部的圖片,但是多張圖片的時(shí)候,我們就需要進(jìn)行多次線性循環(huán)。計(jì)算多少個(gè)loader 裝放我們的圖片。下面采用一中不確定的像無(wú)限參數(shù)的形式來(lái)寫(xiě)。這種是一種偷懶的做法,所以不需要見(jiàn)怪,至于好不好見(jiàn)仁見(jiàn)智。為加載的容器安裝兩個(gè)監(jiān)聽(tīng)器,如果出錯(cuò)就報(bào)告,完成了就去除一部分的監(jiān)聽(tīng),將加載到的內(nèi)容,保存在數(shù)組里面。可以是Vector 也可以是Array. 在cs4兩種都可以。鑒于圖片數(shù)很少,所以這種做法也勉強(qiáng)的完成了加載外部圖片的功能。
private function addImages(...args):void{}
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("路徑錯(cuò)誤"); }
完成之后,我們對(duì)圖片使用容器安裝,并且分布其位置。和其他交互等的設(shè)置。創(chuàng)建一些空白的影片剪輯容器,也有利于創(chuàng)建倒影效果。
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);//數(shù)組管理 list.addChild(bit);//容器管理 Contain.RegPoint(bit,new Point(50,140));//重新更改注冊(cè)點(diǎn) bit.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler); } stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler); }
完成之后,我們還需要對(duì)其進(jìn)行倒影設(shè)置,這次采用網(wǎng)上一些倒影類的做法,輔助我們完成這個(gè)功能
var r1:Reflect = new Reflect({mc:bit, alpha:30, ratio:60, distance:0, updateTime:-1, reflectionDropoff:0});
Reflect類就是一個(gè)倒影的類,在adobe 核心類庫(kù)當(dāng)中也存在的。效果也不錯(cuò)。第一個(gè)參數(shù)指定影片剪輯,第二是透明度,第三個(gè)顯示的多少,第四個(gè)距離。其他是一個(gè)偏移等。日后有時(shí)間會(huì)補(bǔ)充這種講解。
完成之后,也會(huì)發(fā)現(xiàn)這個(gè)類其實(shí)不一定適合我們這種效果,因?yàn)槲覀兯龅牟⒉皇窍M?cè)點(diǎn)在左上角,而是希望在其底部。這樣會(huì)造成這個(gè)類本身設(shè)計(jì)一些缺陷,不得不最后設(shè)置他的位置。因此需要通過(guò)更改他的注冊(cè)點(diǎn),否則會(huì)看不到效果?
下面代碼清單:
其中import com.image.RollPhoto;
??? ? import com.image.Reflect;
??? ? import com.image.tool.Contain;
? 這一次和上次做法差不多,增加我們使用了Reflect 這個(gè)類。Contain類當(dāng)中,有一個(gè)更加注冊(cè)點(diǎn)的做法,來(lái)源于6DN的做法。效果很不錯(cuò)。拼合了就可以出現(xiàn)上面的圖片效果。
總的代碼:主要分為加載圖片的部分,這一部分可以單獨(dú)分開(kāi)出去的。創(chuàng)建圖片的部分,還有運(yùn)算部分。
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();//用于管理的數(shù)組 private var list:MovieClip=new MovieClip();//圖片容器 private var myphoto:RollPhoto;//圖片滾動(dòng)對(duì)象 private var count:int=0;//圖片加載的計(jì)數(shù)器 private var imageList:Array=new Array(); public function Main() { init(); } private function init():void { myphoto=new RollPhoto(stage);//初始化對(duì)象 myphoto.setPorperty(1.4,0.0025,8);//設(shè)置屬性 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; } //創(chuàng)建列表物體 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);//數(shù)組管理 list.addChild(bit);//容器管理 Contain.RegPoint(bit,new Point(50,140));//重新更改注冊(cè)點(diǎn) 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";//內(nèi)存監(jiān)控 } private function mouseMoveHandler(e:MouseEvent):void { if (list.hitTestPoint(mouseX,mouseY) && mouseY<300) { myphoto.ZoomX(array);//以x軸為例 } else { System.gc(); myphoto.Rest(array,"x");//復(fù)位 } } 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("路徑錯(cuò)誤"); } } }
?不足地方:
目前來(lái)講,感覺(jué)到計(jì)算的效率并不是很理想。需要效果能夠出來(lái),但依舊希望有所提高。任何計(jì)算都需要付出代價(jià)。因?yàn)閭€(gè)人能力有限,只能日后如果能夠想到就繼續(xù)完善這種做法。可以對(duì)其代碼進(jìn)行修改,要是要更加好的做法 可以留言告訴我
下載地址:
下載地址請(qǐng)先點(diǎn)擊進(jìn)去:在這里
轉(zhuǎn)載于:https://www.cnblogs.com/guoyiqi/archive/2010/01/28/2069230.html
總結(jié)
以上是生活随笔為你收集整理的flash特效原理:图片滑动放大效果(2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2019_8_1python
- 下一篇: P5200 [USACO19JAN]Sl