当前位置: 首页 > 图文教程 > Flash动画 > ActionScript > AS3编程心得

ActionScript
FLASH AS3与网页JS参数值传递的问题
Flash AS3的parameters对象处理网页参数
Flash教程 认识Flash ActionScript的环境
Flash ActionScript编程基础
Flash AS3代码实现鼠标跟随喷枪涂鸦效果
falsh 跨域调用配置
Flash AS3.0 实例教程 喷泉动画特效
AS3 Loader与URLLoader的比较
ColorTransform类调整显示对象的颜色值
Flash AS3 快速制作烟雾动画
Flash AS3 制作文字飞出动画
ActionScript 学习小心得
ActionScript3.0读取网页FlashVars中的参数的问题
通过实例学习AS3.0:案例三
通过实例学习Flash AS3.0:案例四
通过实例学习Flash AS3.0:案例五
通过实例学习Flash AS3.0:案例六
Flash教程:认识Flash ActionScript的环境
Flash as入门(1):认识AS面板
Flash as入门(3):AS基本语法

ActionScript 中的 AS3编程心得


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-30   浏览: 48 ::
收藏到网摘: n/a

有关AS3编程的一些总结
最近用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对象字符编码转换)

view plaincopy to clipboardprint?

1. public class MoxieAS extends Sprite
2. {
3. public function MoxieAS ()
4. {
5. var loader:URLLoader = new URLLoader(new URLRequest(”ttt.xml”)); // 测试 encode by ANSI
6. loader.dataFormat = URLLoaderDataFormat.BINARY;
7. loader.addEventListener(Event.COMPLETE, complete);
8. }
9.
10. private function complete (event:Event):void
11. {
12. var BA:ByteArray = new ByteArray;
13. BA.writeBytes((event.target as URLLoader).data);
14. BA.position = 0;
15.
16. var xml:XML = XML(BA.readMultiByte(BA.length, “GBK”));
17.
18. trace(xml.*); // output 测试
19. }
20. }

view plaincopy to clipboardprint?

1. public
2. class MoxieAS extends Sprite
{
public function
3. MoxieAS ()
{
var loader:URLLoader = new
4. URLLoader(new URLRequest(”ttt.xml”)); //
5. 测试 encode by
6. ANSI
loader.dataFormat =
7. URLLoaderDataFormat.BINARY;

8. loader.addEventListener(Event.COMPLETE, complete);

9. }

private function complete
10. (event:Event):void
{
var BA:ByteArray = new
11. ByteArray;
BA.writeBytes((event.target as
12. URLLoader).data);
BA.position = 0;


13. var xml:XML = XML(BA.readMultiByte(BA.length, “GBK”));

14.
trace(xml.*); // output 测试
}
}

public class MoxieAS extends Sprite
{
public function MoxieAS ()
{
var loader:URLLoader = new URLLoader(new URLRequest(”ttt.xml”)); // 测试 encode by ANSI
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.addEventListener(Event.COMPLETE, complete);
}

private function complete (event:Event):void
{
var BA:ByteArray = new ByteArray;
BA.writeBytes((event.target as URLLoader).data);
BA.position = 0;

var xml:XML = XML(BA.readMultiByte(BA.length, “GBK”));

trace(xml.*); // output 测试
}
}
感谢abc12hjc提供补充代码

具体用那个方式就看实际功能需求了。
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);

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了。