Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >AS3资源加载器

AS3资源加载器

作者头像
py3study
发布于 2020-01-14 08:05:43
发布于 2020-01-14 08:05:43
69800
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

最近鼓捣除了一个加载器。可以分布式地加载文本文件以及SWF文件。本人将它写成了一个Flex库。本着共同进步的目的,我将其分享出来。

测试结果 :

控制台:

测试资源:

关于 Flash(SWF)美术资源的介绍:

关于测试的核心代码 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package
{
	import com.DispalyLoader;
	import com.LoaderManager;
	import com.ResLibrary;
	import com.TextObjectLoader;
	
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.ProgressEvent;
	import flash.system.ApplicationDomain;
	import flash.system.LoaderContext;
	
	public class MyTest extends Sprite
	{
		[SWF(frameRate='30' , width='1280' , height='720', backgroundColor='0x001119', pageTitle="TEST")]
		public function MyTest()
		{
			var $urlHttp : String = stage.loaderInfo.url;
			var $index : int = $urlHttp.indexOf( "MyTest" );
			var http : String = $urlHttp.substring( 0 , $urlHttp.indexOf( "MyTest" ) );
			trace( http );
			
			var $loader : LoaderManager = new LoaderManager(true,true);
			var $txtRes : TextObjectLoader = new TextObjectLoader( this.textCallback , http + "config.xml" );
			var $txtLanRes : TextObjectLoader = new TextObjectLoader( this.textCallback , "../asset/xml/lan.xml" );
			
			var $display : DispalyLoader = new DispalyLoader( this.displayCallBack,"../asset/swf/Test.swf" , ApplicationDomain.currentDomain);
			var $display1 : DispalyLoader = new DispalyLoader( this.displayCallBack,"../asset/swf/Others.swf" , ApplicationDomain.currentDomain);
			$loader.append( $txtRes );
			$loader.append( $txtLanRes );
			$loader.append( $display );
			$loader.append( $display1 );
			$loader.startLoader();
			
		}
		private function textCallback( $type : String , $data : Object , $extends : Object = null ) : void
		{
			switch( $type )
			{
				case "COMPLETE":
					trace( "http :  " + $data + " 数据 : "  +  $extends as String );
					break;
				case "PROGRESS":
					var $progress : ProgressEvent = $data as ProgressEvent;
					trace("加载进度 : " + ($progress.bytesLoaded / $progress.bytesTotal ) );
					break;
			}
		}
		private function displayCallBack( $type : String , $data : Object , $extends : Object = null ) : void
		{
			switch( $type )
			{
				case "LOADED":
					ResLibrary.instance.addSwf( $data as String , ( $extends as LoaderContext ).applicationDomain );
					// 测试
					var $swfArr : Array = ( $data as String ).split( "/" , ( $data as String ).length );
					var $mc : MovieClip = null;
					switch($swfArr[$swfArr.length-1])
					{
						case "Test.swf":
							$mc = ResLibrary.instance.getMovieClip( "MCC" );
							break;
						case "Others.swf":
							$mc = ResLibrary.instance.getMovieClip( "MCQ" );
							break;
					}
					 
					stage.addChild( $mc );
					break;
				case "LOADED_ERROR":
					break;
				case "PROGRESS":
					break;
			}
		}
	}
}

##############################################################################

补充 : 加载外部p_w_picpath

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com
{
	import flash.display.Bitmap;
	import flash.display.Loader;
	import flash.events.Event;
	import flash.events.HTTPStatusEvent;
	import flash.events.IOErrorEvent;
	import flash.events.ProgressEvent;
	import flash.events.SecurityErrorEvent;
	import flash.system.ApplicationDomain;
	import flash.utils.ByteArray;
	
	import iface.IResLoader;

	/**
	 * 图片加载器
	 * @author Kayer
	 */
	public final class ImagePathLoader implements IResLoader
	{
		private var _simLoader : SimpleStreamLoader;
		private var _loader : Loader;
		private var _doMain : ApplicationDomain;
		private var _url : String;
		private var _callBack : Function;
		private var _nextCallBack : Function;
		/**
		 * @param $callBack : 回调函数
		 * @param $url : img资源位置
		 */
		public function ImagePathLoader($callBack : Function , $url : String)
		{
			this._callBack = $callBack;
			this._url = $url;
			this._loader = new Loader();
			this.eventListener( true );
		}
		private function eventListener( $isAdd : Boolean ) : void
		{
			if( $isAdd )
			{
				this._loader.contentLoaderInfo.addEventListener(Event.COMPLETE,this.onEventReading);
				this._loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR , this.onEventReading);
			}
			else
			{
				this._loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,this.onEventReading);
				this._loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR , this.onEventReading);
			}
		}
		
		public function startLoad($simLoader:SimpleStreamLoader):void
		{
			this._simLoader = $simLoader;
			if(!this._simLoader.isLoading)
			{
				this._simLoader.load( this.simpleStreamLoaderCallBack , this._url );
			}
		}
		private function onEventReading( $e : Event ) : void
		{
			switch( $e.type )
			{
				case Event.COMPLETE:
					this._callBack( "LOADED" , this._url , this._loader.content as Bitmap);//返回图片
					if( this._nextCallBack != null )
						this._nextCallBack();
					break;
				case IOErrorEvent.IO_ERROR:
					this._callBack("LOADED_ERROR" , $e  , null );
					break;
			}
		}
		private function simpleStreamLoaderCallBack( $type : String , $data : * , $extend : Object = null ) : void
		{
			switch( $type )
			{
				case "LOADERROR":
					var $arr : Array = $data as Array;
					trace("加载错误 : url ->[" +this._url+"] = 是否有资源正在加载 :" + $arr[0] + " , 当前加载的url :" + $arr[1] );
					break;
				case "OPEN":
					trace("开始加载 url : " + this._url );
					break;
				case "COMPLETE":
					var $bytes : ByteArray = $extend as ByteArray;
					this._loader.loadBytes( $bytes , null );
					break;
				case "HTTP_STATUS":
					var $httpStatusEvent : HTTPStatusEvent = $data as HTTPStatusEvent;
					trace("url : " + this._url + " , HttpStatu :  " + $httpStatusEvent.status );
					break;
				case "SECURITY_ERROR":
					var $securityErrorEvent : SecurityErrorEvent = $data as SecurityErrorEvent;
					trace( "url :" + this._url + " , " + $securityErrorEvent.text );
					break;
				case "IO_ERROR":
					var $IOErrorEvent :IOErrorEvent = $data as IOErrorEvent;
					trace( "url :" + this._url + " , " + $IOErrorEvent.text );
					break;
				case "PROGRESS":
					var $progressEvent : ProgressEvent = $data as ProgressEvent;
					this._callBack("PROGRESS" , $progressEvent  , null );
					break;
			}
		}
		
		public function get isLoading():Boolean
		{
			return this._simLoader.isLoading;
		}
		
		public function managerLoadingNext($callBack:Function):void
		{
			this._nextCallBack = $callBack;
		}
		/**销毁*/
		public function despose():void
		{
			this._loader.unloadAndStop();
			this.eventListener( false );
			this._loader = null;
			if( this._nextCallBack != null )
				this._nextCallBack = null;
		}
	}
}

测试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package
{
	import com.DispalyLoader;
	import com.ImagePathLoader;
	import com.LoaderManager;
	import com.ResLibrary;
	import com.TextObjectLoader;
	
	import flash.display.Bitmap;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.events.ProgressEvent;
	import flash.system.ApplicationDomain;
	import flash.system.LoaderContext;
	
	public class MyTest extends Sprite
	{
		[SWF(frameRate='30' , width='1280' , height='720', backgroundColor='0x001119', pageTitle="TEST")]
		public function MyTest()
		{
			var $urlHttp : String = stage.loaderInfo.url;
			var $index : int = $urlHttp.indexOf( "MyTest" );
			var http : String = $urlHttp.substring( 0 , $urlHttp.indexOf( "MyTest" ) );
			trace( http );
			
			var $loader : LoaderManager = new LoaderManager(true,true);
			var $txtRes : TextObjectLoader = new TextObjectLoader( this.textCallback , http + "config.xml" );
			var $txtLanRes : TextObjectLoader = new TextObjectLoader( this.textCallback , "../asset/xml/lan.xml" );
			
			var $display : DispalyLoader = new DispalyLoader( this.displayCallBack,"../asset/swf/Test.swf" , ApplicationDomain.currentDomain);
			var $display1 : DispalyLoader = new DispalyLoader( this.displayCallBack,"../asset/swf/Others.swf" , ApplicationDomain.currentDomain);
			var $display2 : DispalyLoader = new DispalyLoader(this.displayCallBack , "../asset/swf/Click.swf" , ApplicationDomain.currentDomain);
			
			var $img : ImagePathLoader = new ImagePathLoader(this.imgCallBack ,"../asset/img/t.jpg");
			$loader.append( $txtRes );
			$loader.append( $txtLanRes );
			$loader.append( $display );
			$loader.append( $display1 );
			$loader.append( $display2 );
			$loader.append($img);
			$loader.startLoader();
			
		}
		private function textCallback( $type : String , $data : Object , $extends : Object = null ) : void
		{
			switch( $type )
			{
				case "COMPLETE":
					trace( "http :  " + $data + " 数据 : "  +  $extends as String );
					break;
				case "PROGRESS":
					var $progress : ProgressEvent = $data as ProgressEvent;
					trace("加载进度 : " + ($progress.bytesLoaded / $progress.bytesTotal ) );
					break;
			}
		}
		private function displayCallBack( $type : String , $data : Object , $extends : Object = null ) : void
		{
			switch( $type )
			{
				case "LOADED":
					ResLibrary.instance.addSwf( $data as String , ( $extends as LoaderContext ).applicationDomain );
					// 测试
					var $swfArr : Array = ( $data as String ).split( "/" , ( $data as String ).length );
					var $mc : MovieClip = null;
					switch($swfArr[$swfArr.length-1])
					{
						case "Test.swf":
							$mc = ResLibrary.instance.getMovieClip( "MCC" );
							var $t : Bitmap  = ResLibrary.instance.getBitMapOnSwf("res.img");
							
							$t.x = 350;
							stage.addChild($t);
							break;
						case "Others.swf":
							$mc = ResLibrary.instance.getMovieClip( "MCQ" );
							break;
						case "Click.swf":
							var $a : MovieClip = ResLibrary.instance.getMovieClip("A");
							$a.x = (stage.width - $a.width )>>1;
							$a.y = (stage.height - $a.height )>>1;
							stage.addChild($a);
							
							var $b : MovieClip = ResLibrary.instance.getMovieClip("B");
							$b.x =  ($a.width - $b.width )>>1;
							$b.y = ($a.height - $b.height )>>1;
							$a.addChild($b);
							
							var $c : MovieClip = ResLibrary.instance.getMovieClip("C");
							$c.x = ($b.width - $c.width )>>1;
							$c.y = ($b.height - $c.height )>>1;
							$b.addChild($c);
							
							$a.addEventListener(MouseEvent.CLICK,this.ClcikHandler,false,0,false);
							break;
					}
					if( $mc != null )
						stage.addChild( $mc );
					break;
				case "LOADED_ERROR":
					break;
				case "PROGRESS":
					break;
			}
		}
		private function imgCallBack( $type : String , $data : Object , $img : Bitmap = null ) : void
		{
			switch( $type )
			{
				case "LOADED":
					var bitm : Bitmap = $img;
					stage.addChild(bitm);
					break;
				case "LOADED_ERROR":
					break;
				case "PROGRESS":
					break;
			}
		}
		
		private function ClcikHandler( event : MouseEvent ):void
		{
			trace( event.target , event.currentTarget );
		}
		
	}
}

注意 :ImagePathLoader的回调函数

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/07/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
as3与php 上传多张图片demo
2、在一次添加的图片中如果超出最大上传数,忽略本次选中的所有图片(又得重新选一次,此现象普通存在于目前各大网站的flash批量上传中)
meteoric
2018/11/15
2.8K0
fms4 p2p:图片分享
这其实是http://www.flashrealtime.com/file-share-object-replication-flash-p2p/ 中关于文件分享示例的改版,原文示例是基于flex的,我改成flash版本了(大致原理与上一篇完全相同): 有三个基本类: 1、P2PSharedObject.as 用于定义要分享的(图片)数据类 package p2p { import flash.utils.ByteArray; public class P2PSharedObject {
菩提树下的杨过
2018/01/23
1.2K0
fms4 p2p:图片分享
AS3反射
当然,像MovieClip,Sprite等除了 使用 new , 还可以用反射 来使它们实例化.
py3study
2020/01/09
6250
AS3反射
as3加载外部资源
在as3的开发中,经常会加载外部共用资源,比如某一个公用的图片或者其它小特效。这时候为了避免重复请求,一般会将这些资源放在一个fla文件中,为每一个资源添加链接。这里以一张图片为例(flower.fla):
meteoric
2018/11/16
8980
【汇总】flash单个文件上传
之前有朋友给我发送email,询问我是否有单个文件上传的源代码,因为当时写这个好像是在09年,所以放哪了一时也没找着。后来整理硬盘的时候,找到了源码,所以决定来个汇总(之前写过的关于flash+js上传文件的例子):
meteoric
2018/11/16
1.1K0
AS3 使用Loader对象加载外部图片
比如要在loading图片的时候显示一个背景gif图(表示正在加载图片)或是显示加载进步等等
meteoric
2018/11/15
9520
浏览器窗口尺寸改变时的图片自动重新定位
俗话说:拳不离手,曲不离口。学过的技能不用,放长了就生疏了,今天以前的同事问我:用户改变浏览器窗口尺寸时,flash中的图片如何重新定位于4个角上。花了近一刻钟才回忆想来:stage有Resize事件,呵呵 代码如下: 1.先把加载图片的逻辑封装一下 package { import flash.display.Sprite; import flash.display.Loader; import flash.display.LoaderInfo; import flash.net.URLReq
菩提树下的杨过
2018/01/22
9540
浏览器窗口尺寸改变时的图片自动重新定位
as3与php 上传单个图片demo
1、单个上传使用FileReference,一次可选择多张图片可使用FileReferenceList,在flash player 10+可使用load方法可实现预览图片
meteoric
2018/11/15
1.5K0
Flex 上传文件,服务端.net
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class upload : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e)     {         HttpFileCollection uploadedFiles = Request.Files; string Path = Server.MapPath("upload"); for (int i = 0; i < uploadedFiles.Count; i++)         {             HttpPostedFile F = uploadedFiles[i]; if (uploadedFiles[i] != null && F.ContentLength > 0)             { string newName = F.FileName.Substring(F.FileName.LastIndexOf("\\") + 1);                 F.SaveAs(Path + "//" + newName);             }         }     } }
用户3135539
2018/09/12
5280
java与as3的socket通信
as3 与java 都提供了Socket类用于网络通信, 但两者的使用也有较大的不同. 为了方便两者的通信, 我在做了一些实验的基础上, 写下获得的经验,以免忘记. as3 的socket 读写数据方法常用的有四个: readUTF, writeUTF, readUTFBytes, writeUTFBytesjava 的socket 输入输出流常用BufferedReader 和 DataOutputStream 包装, 以提高读写效率 如: BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(),   "UTF-8")); DataOutputStream writer = new DataOutputStream(socket.getOutputStream()); as3 方写数据时用writeUTFBytes 方法, 此时java 方读数据用reader.readLine() 阻塞式方法. as3 方写数据时用writeUTF方法, 此时java 方应改用DataInputStream 类包装输入流, 因为BufferedReader 不提供读取UTF数据的方法. java 方写数据时用writeUTF方法, 此时as3 方读数据用readUTF方法, 但此种模式有个弊端, 就是如果java方连续调用了n(n >= 2)次writeUTF方法,而as3方因来不及读取, 则最后只是第一次写入的数据被读取. java 方写数据时用writeBytes, 此时as3 方读数据用readUTFBytes方法读取数据, 可以这样读取: msg = socket.readUTFBytes(socket.bytesAvailable). 一个简单的例子: // as3 写的客户端
py3study
2020/01/10
8050
Flash/Flex学习笔记(16):如何做自定义Loading加载其它swf
const FILE_PATH:String="main.swf"; const CLASS_NAME:String="MainSwf"; var loader:Loader; var request:URLRequest; loader = new Loader(); request=new URLRequest(FILE_PATH); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete); loader.conten
菩提树下的杨过
2018/01/23
7370
Flash/Flex学习笔记(16):如何做自定义Loading加载其它swf
as3+php上传图片的三种方式
1)设置FlashDevelop使用flash player10(debug版本,因为有一个demo使用了本地预览)
meteoric
2018/11/15
1.5K0
Flash:TextField字体不显示/文字不显示/文字丢失
1、是否文字中包含了\r\n等字符,flash中,\r和\n都会换行。需要过滤掉其中1个
用户1258909
2018/07/24
2.3K0
关于AS3的事件移除释疑
as3.0中的事件Event(位于包flash.events内,继承至Object,子类有…)
meteoric
2018/11/16
1.2K0
as 3加载mp3
package { import flash.display.*; import flash.events.*; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundLoaderContext; import flash.media.ID3Info; import flash.net.URLRequest; import flash.external.ExternalInterf
meteoric
2018/11/15
1K0
Flash/Flex学习笔记(52):使用TweenLite
TweenLite是第三方出品的专用于各种缓动动画的类库,其性能据说已经超过了Adobe官方的Tween. 从网上找到了一篇中文的说明文档:http://files.cnblogs.com/yjmyzz/tweenLite%e4%b8%ad%e6%96%87%e6%89%8b%e5%86%8c%e4%b8%8e%e5%8f%82%e6%95%b0%e8%af%b4%e6%98%8e.pdf 这是官方的测试示例: AS3类库下载: http://files.cnblogs.com/yjmyzz/greenso
菩提树下的杨过
2018/01/22
7420
flash开发中如何实现界面代码分离
“flash开发”发展到今天,大体上已经细分为二个分支:Flash 设计师 和 Flash程序员,然而设计师不懂代码,程序员不懂设计,如何把这二种角色有机结合起来,实现代码、界面分离?可能下面的办法对你有用: actionscript3允许把外部swf直接用Embed标记嵌入到主类中(当然用UrlLoader动态加载也行),这意味着设计师们可以把一些常用的与代码无关的素材(比如按钮,图片,小动画),以他们喜欢的方式,用Flash CS工具设计好放到库中。 然后程序员把这类包含(皮肤)素材的swf嵌入到程序代
菩提树下的杨过
2018/01/23
1.3K0
flash开发中如何实现界面代码分离
Away3D基础教程(二):加载外部模型[通俗易懂]
预览地址:http://leoas.host-home-idc.k5.fhfinance.com/tutorials/2/glass.html
全栈程序员站长
2022/09/06
5100
Away3D基础教程(二):加载外部模型[通俗易懂]
AS3给图片加水印文字
通过FileReference获取选中的图片,调用它的load方法,将图片存入到内存中。使用Loader(flash.display.Loader)类的loadBytes方法,加载图片。
meteoric
2018/11/16
6660
自定义Flex Library的使用
一般为了达到资源或是组件的共用,会用到flex library。在flex library可以添加swf、图片资源或的引用。
meteoric
2018/11/16
6210
相关推荐
as3与php 上传多张图片demo
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验