flash 设计记录:图片队列

来源:互联网 发布:php curl post xml 编辑:程序博客网 时间:2024/05/01 23:12
package {import flash.display.Sprite;import flash.events.*;import flash.display.Loader;import flash.net.URLRequest;import flash.display.Bitmap;public class Main extends Sprite{private var loaderMap:Array = [];public function Main(){            addImage("images/1.jpg");  addImage("images/2.jpg");  addImage("images/3.jpg");  addImage("images/4.jpg");  next();}         //添加图片 private function addImage(path:String):void{var loader:Loader=new Loader();loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,onError);loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onProgress);var data:Object={loader:loader,path:path};loaderMap.push(data);}        //下一张图片 private function next():void{            if(loaderMap.length>0){ var data:Object=loaderMap.shift();trace(data["path"]);data["loader"].load(new URLRequest(data["path"]));}}private function onComplete(event:Event):void{event.currentTarget.removeEventListener(Event.COMPLETE,onComplete);event.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR,onError);event.currentTarget.removeEventListener(ProgressEvent.PROGRESS,onProgress);var bitmap:Bitmap = event.currentTarget.content as Bitmap;            bitmap.x=Math.random()*stage.stageWidth;bitmap.y=Math.random()*stage.stageHeight;addChild(bitmap);next();}private function onError(event:IOErrorEvent):void{             trace("错误了");}        private function onProgress(event:ProgressEvent):void{             trace(int(event.bytesLoaded/event.bytesTotal*100)+"%");}}}


有时候,我们想加载一组图片,是希望他按一张接一张来进行加载,根据这个需求,我们可以尝试一下这种简单设计,采用队列加载的方式来进行加载。当完成一张图片之后,调用下一个加载器。这样就可以实现了我们想要的效果了。

   以上代码设计比较简单,因为希望写的简单一些。而着重是看设计,这种设计技巧是一个比较常用的设计。

   例如addImage 记录一个loader 信息,当加载完毕之后 调用next()的方法,这种组合也是比较喜欢一种,不妨试试。

 

我比较喜欢图片下面加点白色的底,这样看起来会很好看。在加载图片之后,不妨尝试写一个白色容器底,这样子效果更加佳。

 

 

package {import flash.display.Sprite;import flash.events.*;import flash.display.Loader;import flash.net.URLRequest;import flash.display.Bitmap;public class Main extends Sprite{private var loaderMap:Array = [];public function Main(){addImage("images/1.jpg");addImage("images/2.jpg");addImage("images/3.jpg");addImage("images/4.jpg");addImage("images/5.jpg");addImage("images/6.jpg");addImage("images/7.jpg");addImage("images/8.jpg");addImage("images/9.jpg");next();}//添加图片 private function addImage(path:String):void{var loader:Loader=new Loader();loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,onError);loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onProgress);var data:Object = {loader:loader,path:path};loaderMap.push(data);}//下一张图片 private function next():void{if (loaderMap.length > 0){var data:Object = loaderMap.shift();trace(data["path"]);data["loader"].load(new URLRequest(data["path"]));}}private function onComplete(event:Event):void{event.currentTarget.removeEventListener(Event.COMPLETE,onComplete);event.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR,onError);event.currentTarget.removeEventListener(ProgressEvent.PROGRESS,onProgress);var bitmap:Bitmap = event.currentTarget.content as Bitmap;var photo:PhotoCantainer = new PhotoCantainer(bitmap);photo.x = Math.random() * stage.stageWidth;photo.y = Math.random() * stage.stageHeight;addChild(photo);next();}private function onError(event:IOErrorEvent):void{trace("错误了");}private function onProgress(event:ProgressEvent):void{trace(int(event.bytesLoaded/event.bytesTotal*100)+"%");}}}import flash.display.Sprite;import flash.display.Bitmap;import flash.filters.DropShadowFilter;//图片容器internal class PhotoCantainer extends Sprite{public function PhotoCantainer(bitmap:Bitmap){addChild(bitmap);bitmap.x =  -  bitmap.width / 2;bitmap.y =  -  bitmap.height / 2;drawBase(bitmap.width,bitmap.height);}     //绘制白色底private function drawBase(w:Number,h:Number):void{this.graphics.beginFill(0xffffff);this.graphics.drawRect(-w/2-5,-h/2-5,w+10,h+10);this.graphics.endFill();this.filters = [new DropShadowFilter(3,45,0,0.5)];}}


 

 

 最后修改一下:

package {import flash.display.Sprite;import flash.events.*;import flash.display.Loader;import flash.net.URLRequest;import flash.display.Bitmap;import flash.geom.Point;public class Main extends Sprite{private var loaderMap:Array = [];public function Main(){addImage("images/1.jpg",new Point(100,100));addImage("images/2.jpg",new Point(200,100));addImage("images/3.jpg",new Point(300,100));addImage("images/4.jpg",new Point(400,100));addImage("images/5.jpg",new Point(500,100));addImage("images/6.jpg",new Point(100,320));addImage("images/7.jpg",new Point(200,320));addImage("images/8.jpg",new Point(300,320));addImage("images/9.jpg",new Point(400,320));next();}//添加图片 private function addImage(path:String,position:Point):void{var loader:SimpleLoader=new SimpleLoader();loader.positon = position;addChild(loader);loader.x = position.x;loader.y = position.y;loader.addEventListener(Event.COMPLETE,onComplete);loader.addEventListener(IOErrorEvent.IO_ERROR,onError);loader.addEventListener(ProgressEvent.PROGRESS,onProgress);var data:Object = {loader:loader,path:path};loaderMap.push(data);}//下一张图片 private function next():void{if (loaderMap.length > 0){var data:Object = loaderMap.shift();trace(data["path"]);data["loader"].load(new URLRequest(data["path"]));}}private function onComplete(event:Event):void{event.currentTarget.removeEventListener(Event.COMPLETE,onComplete);event.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR,onError);event.currentTarget.removeEventListener(ProgressEvent.PROGRESS,onProgress);var bitmap:Bitmap = event.currentTarget.content as Bitmap;var photo:PhotoCantainer = new PhotoCantainer(bitmap);            var loader:SimpleLoader=event.currentTarget as SimpleLoader;photo.x = event.currentTarget.positon.x;photo.y = event.currentTarget.positon.y;removeChild(loader)addChild(photo);next();}private function onError(event:IOErrorEvent):void{trace("错误了");}private function onProgress(event:ProgressEvent):void{var loader:SimpleLoader = event.currentTarget as SimpleLoader;var percent:String = int(event.bytesLoaded / event.bytesTotal * 100).toString() + "%";loader.showProgress(percent);trace(percent);}}}import flash.display.Sprite;import flash.display.Bitmap;import flash.filters.DropShadowFilter;import flash.display.Loader;import flash.geom.Point;import flash.text.*;import flash.display.Shape;import flash.events.*;import flash.net.URLRequest;import com.greensock.TweenLite;//图片容器internal class PhotoCantainer extends Sprite{public function PhotoCantainer(bitmap:Bitmap){addChild(bitmap);bitmap.x =  -  bitmap.width / 2;bitmap.y =  -  bitmap.height / 2;drawBase(bitmap.width,bitmap.height);this.alpha=0;this.rotationX=60;TweenLite.to(this,0.5,{alpha:1,rotationX:0});} //绘制白色底private function drawBase(w:Number,h:Number):void{this.graphics.beginFill(0xffffff);this.graphics.drawRect(-w/2-5,-h/2-5,w+10,h+10);this.graphics.endFill();this.filters = [new DropShadowFilter(3,45,0,0.5)];}}internal class SimpleLoader extends Sprite{public var positon:Point;//位置private var progressMsg:TextField;//进度文本private var shape:Shape;private var _content:Object;private var loader:Loader;public function SimpleLoader(){loader=new Loader();loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,onError);loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onProgress);}public function load(requst:URLRequest):void{loader.load(requst);}private function onComplete(event:Event):void{clear();this.content = event.currentTarget.content;this.dispatchEvent(event);}private function onError(event:IOErrorEvent):void{this.dispatchEvent(event);}private function onProgress(event:ProgressEvent):void{this.dispatchEvent(event);}public function set content(value:Object):void{this._content = value;}public function get content():Object{return this._content;}//显示进度;public function showProgress(str:String):void{if (! progressMsg){drawBase(20);progressMsg=new TextField();progressMsg.autoSize = TextFieldAutoSize.LEFT;progressMsg.x = -8;progressMsg.y = -8;addChild(progressMsg);}else{progressMsg.text = str;}}private function clear():void{if (this.contains(progressMsg)){removeChild(progressMsg);}progressMsg = null;this.filters = [];this.graphics.clear();}    //绘制底部private function drawBase(r:Number):void{this.graphics.beginFill(0xFF8000);this.graphics.drawCircle(0,0,r);this.graphics.endFill();this.filters = [new DropShadowFilter(3,45,0,0.5)];}}


 

 

 

 

原创粉丝点击