加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flash 设计记录:图片队列

发布时间:2020-12-15 06:52:10 所属栏目:百科 来源:网络整理
导读: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(){ addIma
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,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,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.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",320));
			addImage("images/7.jpg",320));
			addImage("images/8.jpg",320));
			addImage("images/9.jpg",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 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,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,r);
		this.graphics.endFill();
		this.filters = [new DropShadowFilter(3,0.5)];
	}

}


(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读