flash getSize 方法

2010年7月25日 没有评论

今天看优化 Flash 平台的性能帮助文档时发现一个未公开的顶级函数 getSize()
猜想getSize的接口可能是:

/**
 * 获取对象的内存占用量
 * @param	p	任意类型,甚至是Class
 * @return	一个数值,单位是byte
 */
public function getSize(p:*):uint;

不过这个方法只能在时间轴上使用,在类里就不能用了.
然后我测试了下flash里有没有内存对齐的概念.
不过获得的内存值都是4的倍数,
如果里面有属性占用为8,则结果则为8的倍数.
相关链接
http://help.adobe.com/zh_CN/as3/mobile/WS4bebcd66a74275c3-576ba64d124318d7189-8000.html
http://help.adobe.com/zh_CN/as3/mobile/WS4bebcd66a74275c3-576ba64d124318d7189-7fff.html

分类: AS, Flash 标签: ,

jsfl 在Flash CS5中选择图形

2010年7月25日 没有评论

在Flash IDE里的一些重复劳动用jsfl是个很好的解决办法.
这里是中文帮助http://help.adobe.com/zh_CN/flash/cs/extend/index.html
当然也可以配合Flash的历史面板来学习(Ctrl+F10 或者 Window=>Other Panels=>History)
不过这个也不是全都能用的,在不同的Flash 版本上也会出现不同的灵异事件

fl.getDocumentDOM().selection 选择图形
先在flash里画一个简单图形(选中后会出现类似下图的网状遮罩)

// 选中舞台上所有对象
fl.getDocumentDOM().selectAll();
// 获取选中对象数组
var arr = fl.getDocumentDOM().selection;
// 取消选择
fl.getDocumentDOM().selectNone();
// 设置选中对象为刚获取的对象数组,
// 但是这个操作在Flash CS5里会忽略 简单图形(Shape,不是组,也不是绘制对象)
// 在Flash CS4里却没有这样的问题
fl.getDocumentDOM().selection = arr;
分类: Flash 标签: ,

弱引用 addEventListener

2010年6月27日 没有评论

之前只是知道尽量用强引用,不要用弱引用,因为弱引用会被垃圾回收.
对于flash.utils.Dictionary倒是没有什么疑问.但EventDispatcher.addEventListener就不明白具体是侦听器被回收了,还是侦听者被回收了 :mrgreen:
昨天有看了一些文章,又想起这个问题,就想要理解透彻,于是又仔细看了下API文档.

Class-level member functions are not subject to garbage collection, so you can set useWeakReference to true for class-level member functions without subjecting them to garbage collection. If you set useWeakReference to true for a listener that is a nested inner function, the function will be garbge-collected and no longer persistent. If you create references to the inner function (save it in another variable) then it is not garbage-collected and stays persistent.

原来这里的弱引用是对侦听器的(侦听器函数),跟侦听者没有关系.
为了验证这个观点,我做了个小Demo.
OK,让我们来一边享受引用,一边学习吧 :grin:
阅读全文...

分类: AS 标签: , ,

Flex工程里TextField在fp10.1下不能输入中文的解决办法

2010年6月26日 1 条评论

前段时间项目测试突然发现中文输入不正常,有时IME会失效,反复测试后发现这是fp10.1的一个bug.
然后提交到 http://bugs.adobe.com/jira/browse/FP-4813
可是正式版的flashplayer已经发布了,要修复这个bug也要等到下个flashplayer版本 :cry:
我们的项目可等不了那么久,于是找找其他解决办法, Google,百度后都没有提到过类似的问题.
设置IME.enabled = true也不管用.
仔细测试后发现:Flex的TextInput可以输入中文,既然flex的可要输入,那么TextField也应该可要输入中文的.
于是翻开mx.controls.TextInput的源码仔细查看. 几经测试后终于在一处注释处发现了一点线索.

We don't call IME.conversionMode here. We call it only on focusIn. Thus fringe cases like setting imeMode dynamically without moving focus, through keyboard events, wouldn't change the mode. Also getting imeMode asynch. from the server which gets delayed and set later after focusIn is not handled as having the text partly in one script and partly in another is not desirable.

既然说在获得焦点后设置imeMode,那么我是不是也应该在focuseIn后设置IME.enabled呢 :roll:
说干就干,马上做了一个测试,果然成功了 :cry: 困扰我多时的问题终于解决了 :grin:
阅读全文...

分类: bugs 标签: , ,

URLLoader 404 Error 与 complete事件

2010年3月31日 6 条评论

最开始发现是在AS2里用MovieClipLoader加载图片,那次地址写错了,但是依然有onLoadComplete事件触发.
请看下面的代码:

var mc:MovieClip = _root.createEmptyMovieClip("mc", 1);
var loader:MovieClipLoader = new MovieClipLoader();
var listener:Object = {};
loader.addListener(listener);
 
// 加载一个错误的图片地址,但只要有数据返回(哪怕是404)就会触发complete事件
loader.loadClip("http://www.lite3.cn/errorJpg.jpg", mc);
 
listener.onLoadComplete = function(target:MovieClip):Void
{
	trace("this is loadComplete!");
}

阅读全文...

分类: AS 标签: , , , ,

throw error 异常

2010年3月28日 2 条评论

前几天在调试一个AS2跟后台通信的程序,一直看不到正常的数据显示,然后就挨行trace,终于发现问题所在了.
原来是用了AS2的一个JSON类,如果格式不是json格式就会抛出异常,因为我们的数据格式不会错的,要么就没有数据,否则不会出现格式错误的,所有就没有try catch.
刚好这次测试的时候有一个元素里没有数据,json串为""(空字符串).然后解析的时候抛了个异常,我没有捕获,就终止那段程序.
请看AS2的JSON里抛异常的方式:
阅读全文...

分类: AS 标签: , , ,