日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 flash特效原理:图片滑动放大效果(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

?? 最近看了一些關于動態注冊點更加的辦法,順手牽羊把他下載了,感覺挺好用。再把一個倒影類給下載了,結合上次一個做法,做了一個簡單demo 。這一次,我們采用外部加載的辦法來制作。這樣更加合理的。鑒于這只是一個簡單demo ,只是知道了原理就能夠把握到的東西,所以這樣只是希望討論怎樣優化這種效果。下面的一個代碼是加了一點倒影類的影子,效果看起來很不錯,至于性能就有待改進。在這里只是提出一種demo,如果有心人能夠完善,也可以發表一下意見,共同完成這個事情。事不宜遲,講解怎樣外部導入多張圖片。

我們不使用那些開源的類,內部類就可以簡單解決這個問題。

?

加載多張圖片:Loader 是一個容器,可以加載外部的圖片,但是多張圖片的時候,我們就需要進行多次線性循環。計算多少個loader 裝放我們的圖片。下面采用一中不確定的像無限參數的形式來寫。這種是一種偷懶的做法,所以不需要見怪,至于好不好見仁見智。為加載的容器安裝兩個監聽器,如果出錯就報告,完成了就去除一部分的監聽,將加載到的內容,保存在數組里面??梢允荲ector 也可以是Array. 在cs4兩種都可以。鑒于圖片數很少,所以這種做法也勉強的完成了加載外部圖片的功能。

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("路徑錯誤"); }

完成之后,我們對圖片使用容器安裝,并且分布其位置。和其他交互等的設置。創建一些空白的影片剪輯容器,也有利于創建倒影效果。

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的做法。效果很不錯。拼合了就可以出現上面的圖片效果。

總的代碼:主要分為加載圖片的部分,這一部分可以單獨分開出去的。創建圖片的部分,還有運算部分。

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("路徑錯誤"); } } }

?不足地方:

目前來講,感覺到計算的效率并不是很理想。需要效果能夠出來,但依舊希望有所提高。任何計算都需要付出代價。因為個人能力有限,只能日后如果能夠想到就繼續完善這種做法??梢詫ζ浯a進行修改,要是要更加好的做法 可以留言告訴我

下載地址:

下載地址請先點擊進去:在這里

轉載于:https://www.cnblogs.com/guoyiqi/archive/2010/01/28/2069230.html

總結

以上是生活随笔為你收集整理的flash特效原理:图片滑动放大效果(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。