`
wgcode
  • 浏览: 578099 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Flash AS3 Loader的一些总结

阅读更多

最近用AS3写一些项目,在编程过程中,碰到不少问题,同时也有一些收获和心得。现在贴出来希望对大家在AS3编程有一些帮助。假如你发现有说得不对的地方,你可以指出来,大家一起来讨论。

1、AS3的强制类型转换

我之前一直以为是没有这个功能的,而最近在看一些文档,发现这个功能是有的。目前总结下来有两种写法:

  1. var loader:URLLoader = URLLoader(event.target);
    不知道这种写法是借鉴那种编程语言,反正我没有见过。
    补充这个语法说明:http://livedocs.adobe.com/flash/8_cn/main/00001211.html
  2. var loader:URLLoader = event.target as URLLoader;
    这种写法是借鉴VB.Net编程语言,唉!AS3语法真得一个大杂烩。

2、URLStream和URLLoader

URLStream在文本文件数据方面可以支持多种字符编码。
URLLoader在进过测试后,发现除UTF-8字符编码外,其他字符编码读过来的数据都是乱码。

可通过ByteArray对象字符编码转换(感谢abc12hjc提供补充代码):

public class MoxieAS extends Sprite
{
public function MoxieAS ()
{
var stream:URLStream = new URLStream;

stream.addEventListener(Event.COMPLETE, complete);
stream.load(new URLRequest("ttt.xml")); // <root><a /><b /><c /></root>
}

private function complete (event:Event):void
{
var stream:URLStream = event.target as URLStream;
var xml:XML = XML(stream.readUTFBytes(stream.bytesAvailable));

trace(xml.*.length()); // output 3
}
}

 

具体用那个方式就看实际功能需求了。

3、URLRequest

URLStream、URLLoader、Loader等读取外部数据的类,里的load方法参数值是URLRequest对象。我在编程过程总是喜欢直接写地址字符串,原来习惯改过来看样子要花点时间了。

4、Loader

在使用Loader来加载数据时,添加侦听事件时,注重一定要给Loader的 contentLoaderInfo属性增加事件,而不是给Loader对象增加事件。我就是因为加错对象(要害是编译时还没有报错),郁闷得差点要把电脑给扔了。

错误写法:

var loader:Loader = new Loader(); 
 loader.addEventListener(Event.COMPLETE, completeHandler);
 loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); 
 loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);

 
 正确写法:

 var loader:Loader = new Loader(); 
 loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
 loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); 
 loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);

 

1 Bitmap  swf加载进来SWF转换成一个Bitmap

private function complete(evt:Event):void
		{
			var loaderInfor:LoaderInfo=evt.currentTarget as LoaderInfo;
			if (loaderInfor != null)
			{
				var loader:Loader=loaderInfor.loader;
				if (loader != null && loader.content != null)
				{
					var bmpData:BitmapData=new BitmapData(loader.width,loader.height,true,0);
					bmpData.draw(loader,null,null,null,null,true);
					if(_roleIcons[loader.name].bitmapData)
						_roleIcons[loader.name].bitmapData.dispose();
					_roleIcons[loader.name].bitmapData=bmpData;
					_roleIcons[loader.name].width = obj.width;
						_roleIcons[loader.name].height = obj.height;
					delete _roleIcons[loader.name];
				}
			}
			beginLoadIcon();
		}

 

//加载成功,发布成功事件
                private function completeFun(e:Event):void {
                        data = loader.content["bitmapData"];
                        delEvent();
                        dispatchEvent(e);
                }
 

2 MovieClip  加载SWF里面的元素【MC、Bitmap】

var equip:Class=_loader.contentLoaderInfo.applicationDomain.getDefinition("equipment") as Class;
			if(equip) {
				_equipIcons=new Bitmap(new equip(0,0));
				updateGoodsIcon(_notLoadEquip);
				_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,loadEquipComplete);
				_notLoadEquip = null;
				_loader.unload();
				next();
			}

 

5、Loader加载过来的数据类型

大家知道Loader是用来代替原来 MovieClip的loadMovie功能,用于加载外部的图片文件,SWF文件。

  • 假如加载图片文件(jpg,gif,png等)时,Loader.content得到数据类型是Bitmap对象;
  • 假如加载SWF文件(flash 9 版本)时,Loader.content得到数据类型是MovieClip对象;
  • 假如加载SWF文件(flash 9 以前版本) 时, Loader.content得到数据类型是AVM1Movie对象;

6、stage

在调试flash过程发现,假如把swf文件放到html页面后,stage.stageWidth和stage.stageHeight在第一次加载调用时,他们的值为空值;

7、 AVM1Movie

假如是AVM1Movie 对象时,就不能直接调用stop,play,gotoAndStop等原来MovieClip对象的功能了,而且不能将AVM1Movie 对象转换成MovieClip对象。目前解决办法:一种是用flash cs3 重新生成 flash 9的swf文件;另一种是国外网站有说能AVM1和AVM2两个虚拟机相互调用的方式(贴一个地址);

8、mask

在使用遮罩功能,发现一个问题,假如不把用于遮罩的显示元件通过addChild方法添加到同一级的显示容器里的话,遮罩效果就显示不正常,不知道这个是不是一个bug。我差点因为这个问题而放弃AS3改用AS2了。

分享到:
评论

相关推荐

    as3 loader资源的回收

    as3 loader资源的回收示例代码,带有完整的源码和例子

    flash as3 加载外部swf jpg gif png loader urlloader的通用代码

    flash as3 加载外部swf jpg gif png loader urlloader的通用代码

    flashbuilder4 loader 进度学习作品

    对学习flash as3 都比较有参考价值

    flash actionscript3 as3 BulkLoader多资源加载队列的用法.ziploading加载队列bulk_loader

    flash actionscript3 as3 BulkLoader多资源加载队列的用法.ziploading加载队列bulk_loader

    AS3焦点图 Flash ActionScript 3.0 焦点图 经典网络应用程序

    AS3焦点图 Flash ActionScript 3.0 焦点图 经典网络应用程序。XMl文件读取。/* 用到了知识点: Timer XML URLLoader pic Loader 按钮 按钮单击事件 */ /** 思路: 不进行缩放 1.初始化,控制面板背景,表示标题的...

    stm32flash

    *Baud rate must be kept the same as the first init* This is useful if the reset fails Examples: Get device information: ./stm32flash /dev/ttyS0 Write with verify and then start execution: ./...

    i.mx RT-1050 下载工具和板上系统

    Flashloader is designed to work as a second stage of Bootloader for i.MX RT1050 device, it detects communication traffic on one of the the supported peripherals (USB-HID and UART), download a user ...

    as3比较详尽的工具类

    LoaderSprite.as ---------------------- 处理Loader相关的Sprite Registration.as ---------------------- 变换注册点 SubMovieClip.as ---------------------- movieClip基类 QMC.as ---------------------- ...

    php与flash as3 socket通信传送文件实现代码

    通过socket方式传送swf文件来避免泄漏源代码的思路(只适用as3): 让主程序的loader(前台swf)通过socket连接到后台程序,然后请求需要的主程序文件.后台读取主程序数据通过socket发送给主程序的 loader.前台swf适用...

    As3访问http和webService的类,HttpRequest

    import flash.net.URLLoader; import flash.net.URLRequest; import flash.events.*; import flash.net.URLVariables; public class HttpRequest { private var loader:URLLoader;// private var ...

    MSP430™ flash devices bootloader (BSL)

    The MSP430™ bootloader (BSL) (formerly known as the bootstrap loader) allows users to communicate with embedded memory in the MSP430 microcontroller (MCU) during the prototyping phase, final ...

    以二进制形式读取外部图片文件(AIR)

    import flash.display.Loader; import flash.display.NativeMenu; import flash.display.NativeMenuItem; import flash.display.NativeWindow; import flash.display.Sprite; import flash.display.StageAlign...

    AS加载一外部SWF调用该swf内部方法

    AS加载一外部SWF调用该swf内部方法,一个Flash中通过AS3代码的Loader对象加载另一个SWF文件,并访问其中的文档类中的方法。 简单示例: 主文件:Main.fla, Main.as 被调用的文件:called.swf, Called.as

    用AS3加载外部SWF文件

    用ActionScript 3.0加载外部SWF文件,每个按钮对应一个文件,在同一时刻只能加载一个文件,令被加载的文件显示在固定大小的容器内。Adobe Flash CS4格式

    拆积木代码

    import mochicrypt.as3.*; dynamic public class Preloader extends MovieClip { private var payloadLoader:Loader; private var patchProgress:Number = 0; private var payloadProgress:Number = 0; ...

    JLink_Windows_V648.zip

    Firmware: Flasher Portable PLUS: Universal Flash Loader mode detection in batch mode did not work. Fixed. Firmware: Flasher Portable PLUS: Number of bytes to program was not calculate correctly, ...

    Stratix IV GX 开发套件出厂恢复程序

    please follow instructions as described in the User's Guide, chapter entitled: "Restoring the Flash Device with the Factory Settings" build_factory_source: For advanced users This directory ...

    gulp-jinx-inject:用于注入 Jinx .AS 包文件的 GulpJS 插件

    var tmpMainFile = '.tmp/as/app/flash/main.as' ;var pkgs = require ( 'jinx-loader' ) ( tmpMainFile ) ;return gulp . src ( tmpMainFile ) // file path to inject. pipe ( jinxInject ( pkgs . as ) ). pipe ...

    uboott移植实验手册及技术文档

    (3)将从Nor Flash启动改成从 NAND Flash启动 在文件中找到 195-201 代码,并在 201行后面添加如下代码: 195 copy_loop: 196 ldmia r0!, {r3-r10} /* copy from source address [r0] */ 197 stmiar1!, {r3-r10...

Global site tag (gtag.js) - Google Analytics