10五/11
一小段 signals 测试代码
在自己的项目里进一步完善了 signals, 目前已全面替代了自定义事件并整合进 Robotlegs,写起代码来更舒服了。
assertEquals(575, instance.getCount("foo")); handleSignal(this, instance.countChanged, function(signal:ValueChangedSignal):void { assertEquals("foo", signal.key); assertEquals(500, signal.value); assertEquals(575, signal.old); assertEquals(500, signal.target.getCount("foo")); }); instance.setCount("foo", 500); |
28一/08
[AS3]下雪系统类SnowSystem
- Demo | 效果演示
- SnowSystem Class Code | 类代码
- Demo Code | 演示代码
- Source Download | 源文件下载
- API Documentation | 编程接口文档
如果使用默认效果,只需要在构造时指定宽高:
addChild(new SnowSystem(640, 480));
如要使用自己的雪花,可以在 构造函数 里传入或使用 setSkin 方法:
16六/07
AS3制作SWF播放器
AS3的 LoaderInfo 类为我们加载外部资源提供了更多的可控信息,以前制作SWF播放器的两大难题终于可以得到解决:
-
获得加载SWF的舞台大小以缩放到适合尺寸显示
LoaderInfo 的 width 和 height 属性便是舞台大小。 -
使加载的SWF按自己的帧频播放
LoaderInfo 的 frameRate 属性为加载SWF的帧频,可以修改Stage的 frameRate 属性适应播放。
做了一个 简单的例子 ,分别加载300×150帧频5和100×150帧频20的两个swf到200×200大小的区域播放,注释写的很详细,就不啰嗦了。
3六/07
AS3应用程序模块化开发与ApplicationDomain
当程序越来越大,我们需要把它拆分成多个swf,在需要的时候动态加载。拆分时应该尽量把不同的类编译进唯一的swf,避免因swf文件增多而使整个程序的文件尺寸增大。按此原则可以拆分出以下两种swf,借助 ApplicationDomain 共享其代码和资源。
- 模块(Module)
按照程序逻辑,可以拆分出多个“功能模块”,如“注册”、“管理”等等;按照游戏或社区类程序的关卡或场景,可以拆分出不同的“场景模块”。这些模块不是主程序运行必须的,只在需要的时候加载。 - 运行时共享库(RSL)
主场景或者多个模块通用的资源,比如位图、声音、设计好的页面元素等,可作为“库”在主程序运行前加载。可以整套更换的皮肤(skin)只需先加载一套。
1六/07
[AS3]数据存取方式效率比较
通常我们存取数据有如下几种方式:Array, Object, 自定义类, 比较特殊的还有 Point, Rectangle 等。效率依次为(后面的数字是100万次存取运算平均所需时间):
- 自定义类public属性135 | Point140 | Rectangle(x等属性)140
- Array270
- Object500 | 自定义动态类动态属性550
- Rectangle(left等属性)700
- 自定义类getter/setter1000 | 自定义类Function1000
出乎意料,最快的是自定类的public属性,速度是Array的两倍Object的四倍getter/setter的八倍——很整的倍数关系。另外存取坐标要用Point和Rectangle,比Array快的多。Object还是少用吧,多用自定义类。
另外自定义密封类(sealed,默认)和自定义动态类(dynamic)的public属性、getter/setter速度几乎一样,而动态类动态添加的属性和Object相若。


