2009年07月6日 – 23:06
By FoxLing Posted in AS/Flex/AIR
通过自定义类的方式创建皮肤,控制性更强,占用的内存更少。
ProgrammaticSkin类是外观元素的基类,它们通过编程方式来绘制自身。
关于ProgrammaticSkin类的更多信息,猛击这里:
http://www.airia.cn/ActionScript3API/livedocs/mx/skins/ProgrammaticSkin.html
自定义类
package skins
{
import flash.display.GradientType;
import flash.display.Graphics;
import mx.skins.ProgrammaticSkin;
public class CustomBG extends ProgrammaticSkin
{
public function CustomBG()
{
super();
}
override protected function updateDisplayList(w:Number, h:Number):void
{
super.updateDisplayList(w, h);
var g:Graphics = graphics;
var fillColors:Array = [0x191919,0x262626,0x191919];
var fillAlphas:Array = [1.0,1.0,1.0];
var fillRatios:Array = [0,127,255]
g.clear();
drawRoundRect(0, 0, w, h, 0, fillColors, fillAlphas,
horizontalGradientMatrix(0, 0, w, h), GradientType.LINEAR,fillRatios );
}
override public function get measuredWidth():Number
{
return 8;
}
override public function get measuredHeight():Number
{
return 8;
}
}
}
在CSS中使用ClassReference调用自定义类
.customBg
{
backgroundSize: “100%”;
backgroundImage: ClassReference(“skins.CustomBG”);
}
2009年07月3日 – 01:49
By FoxLing Posted in AS/Flex/AIR
收集了不少的会导致内存泄露的情况:
事件监听:
对父级对象加了监听函数,会造成内存泄露,例:
override protected function mouseDownHandler(…):void
{
systemManager.addEventListener(“mouseUp”, mouseUpHandler);
......
解决:
在销毁对象的时候,remove掉这些监听,虽然弱引用也可以避免这些问题,但自己掌控感觉更好。
但以下几种情况不会造成内存泄露:
总之…有addEventListener,就removeEventListener一下吧,要为自己做的事负责~哈哈
清除引用
remove掉子对象后并不会删除该对象,他还保留在内存中,应该将引用设置为null
removeChildren(obj);
obj = null;
阅读全文 »
2009年06月24日 – 22:52
By FoxLing Posted in AS/Flex/AIR
public static function log(txt:String):void
{
var date:Date = new Date();
var fileName:String;
fileName = "errlog-" + date.getFullYear().toString() + (date.getMonth()+1).toString() + date.getDate() + ".txt";
var file:File = File.applicationStorageDirectory.resolvePath(fileName);
var fs:FileStream = new FileStream();
txt = "\n\n--------" + date.toString() + "----------\n" + txt
fs.open(file,FileMode.APPEND);
fs.writeUTFBytes(txt);
fs.close();
}
废话不多说,直接看代码,将需要记录的日志,比如出错信息记录到程序数据文件夹,以日期命名,便于追踪信息。
2009年05月24日 – 02:20
By FoxLing Posted in AS/Flex/AIR
SWFObject
SWFObject是一个用于在HTML中方面插入Adobe Flash媒体资源(*.swf文件)的独立、敏捷的JavaScript模块。该模块中的JavaScript脚本能够自动检测PC、Mac机器上各种主流浏览器对Flash插件的支持情况。它使得插入Flash媒体资源尽量简捷、安全。而且它是非常符合搜索引擎优化的原则的。此外,它能够避免您的 HTML、XHTML中出现object、embed等非标准标签,从而符合更加标准。
SWFObject在IE下的BUG
如果Flash里绘制的对象的宽高是自适应Flash的宽高的,那么,使用SWFObject来插入Flash在IE会导致一个问题,当这个Flash被缓存后,也就是第二次访问该页面时,在该Swf文件被加载时,获取到的stage.stageWidth和stage.stageHeight为0,绘制的对象也就看不到了。
阅读全文 »
2009年04月29日 – 00:43
By FoxLing Posted in AS/Flex/AIR
单件模式用于限制类的实例化次数,使你在系统的任何位置都能访问到同一个实例;达到节省资源,管理方便的效果。
单件模式的应用
从一个XML文件加载程序的基本配置信息,只需要在Flash初始化的时候或者Air程序启动的时候执行一次即可,并且,在程序的整个运行阶段都只需要一个实例,并不需要建多个实例或者读取多次XML。
例如:用一个xml文件保存AIR应用程序配置信息,里面包含窗口起始位置,窗口的宽高。
<setting>
<window x="100" y="100" width="300" height="400">
</setting>
单件模式的实现
package cn.foxling.test
{
public class Setting
{
private static var _instance:Setting;
public function Setting(enforcer:SingletionEnforcer)
{
}
public static function getInstance():Setting
{
if (Setting._instance == null) Setting._instance = new Setting(new SingletionEnforcer());
return Setting._instance;
}
}
}
class SingletionEnforcer {}
阅读全文 »