Tag Archives: AS3技巧

Flex4.0 SDK,AS3工程,选择性的嵌入字体

1. 嵌入字体

2. 使用字体

如果要在Flex3.X中嵌入字体,到此就可以结束了。但是在Flex4.0 SDK中字体很有可能无法显示。这就需要下面的步骤了。
3. 解决Flex4.0 SDK的问题

    • 方法1,在embed标签中加入embedAsCFF=\”false\”。

    • 方法2,修改SDK目录下flex-config.xml文件。

将AFEFontManager挪到的最后一行。

Flash平台应用性能优化官方文档摘要

1. 关于存储

  • 使用适当的Display Object
    • Shape – 没有交互(占内存少)
    • Sprite – 有交互(占内存多)
    • MovieClip – 有时间线(占内存更多)
  • 尽可能重用对象,而不要重新创建
  • 强制类型转换int(exp)要比Math.floor()和Math.ceil()快很多
  • 使用对象池技术重用对象
  • 释放内存 – 将所有对象的引用设置为null
  • 尽可能重用BitmapData
  • Callback要比event快而且消耗更少的内存

2. 减少CPU使用率

  • 即便将一个Display Object从stage上移除了(removeChild)甚至是已经将它的引用设置为null,它依然有可能在消耗CPU。所以要在其移出display list时将其完全停下来(比如mc.stop())。
  • 卸载从外部装载的内容时,使用loader.unloadAndStop(),而不要使用loader.unload()。
  • 尽可能禁用鼠标交互。obj.mouseEnabled = false; obj.mouseChildren = false;
  • Timer在某些情况下比ENTER_FRAME要好。
  • 减少tweening的使用。

3. ActionScript性能

  • 尽 可能使用Vector替代Array。固定长度的Vector更快。(Vector可以这样初始化:var coords:Vector.<Number> = Vector.<Number>([132, 20, 46, 254, 244, 100, 20, 98, 218, 254]);)
  • 新的drawing API更快,它们是:drawPath, drawGraphicsData, drawTriangles。
  • 使用setVector()方法来处理像素。
  • 使用setPixel()和setPixel32方法时,要配合使用lock()和unlock()方法。
  • 使用TextField时,appendText()方法比+=操作符要快。
  • 尽可能在避免在循环内更新TextField。
  • 尽可能少使用方括号操作符访问Vector或Array元素,可以利用一个临时变量来操作。
  • 尽量将代码内嵌,避免过多的函数调用。(比如用 value > 0 ? value : -value; 来代替Math.abs())
  • 代码量过大也会造成性能的降低。尽量少使用大型第三方库(Flex, TLF)。
  • 避免在循环内使用evaluating statements(myArray.length)。用临时局部变量来操作。
  • 更多优化技巧参考:http://www.rozengain.com/blog/2007/05/01/some-actionscript-30-optimizations/

4. 渲染性能

  • 尽可能避免使用alpha参数。
  • 适当的使用cacheAsBitmap可以大幅提高性能。(对于变化少的矢量元件)
  • 针对每个子元件使用cacheAsBitmap而不是针对父元件使用。
  • 使用TextLine处理静态文本比TextField快而且使用更少的内存。
  • 使用cacheAsBitmap和opaqueBackground参数可以改进渲染性能(包含TextField)。

[转载] 在SWF内滚动,而不是页面上(更好的方案)

以前我转载过一篇文章,说的是如何防止flash中的滚轮事件影响到整个页面。但是那个方法是通过在页面中插入一段js代码来实现的。
今天,我又看到一篇文章,它不是在页面上解决此问题,而是在flash内部解决的,这无疑更加方便了开发者。
请参考:
在SWF内滚动,而不是页面上

FlexPMD的命令行使用方式

昨天,在两位adobe人士的博客上认识了FlexPMD,觉得确实是个好东西,于是就研究了一下使用方法。(简单说,FlexPMD是Flex和AS代码的静态检查工具。)

两篇文章的地址:7yueSWFever

平时使用的开发环境是Flex Builder 3,可惜FlexPMD的FB插件还在计划中,无奈只能使用命令行版本。

安装步骤

  1. 下载FlexPMD命令行版本。(下载地址
  • 将flex-pmd-command-line-1.0.RC3.zip解压缩。(例如:E:\\flexpmd目录)
  • 制作规则文件。(没有规则文件是无法正确运行的)
  1. 打开Ruleset Creator
  • 制定需要的规则。(或者按照默认的都选上)
  • 点击下方的Export按钮。
  • 保存规则文件。(例如:E:\\pmd_all.xml)
  • 安装Java运行环境。(一般都有吧。没有的话到这里安装。)

使用步骤

  1. 运行cmd打开命令行,执行如下命令:
  • 其中[sourceDirectory]是准备检测的as源文件目录,[outputDirectory]是结果输出目录。
  • 如果成功的话会在output目录生成pmd.xml(结果文件)。
  • 查看结果。

其实就在我费劲半天研究出怎么使用之后,才发现了官方的命令行使用教程(地址)。衰啊…

[推荐] 如何让程序跑得更快

这是我看到过的一篇不错的文章,用浅显易懂的例子说明了如何优化我们的ActionScript代码。链接在这里

文章是英文的,因为代码很容易看懂,所以就不翻译了。(只看标题和代码就足够了

例子使用了getTimer来测量运行时间,每一段代码的优化都有明显的效率提高,从最初的1750ms减少到20ms,效果是很惊人的。

其实,优化是很简单的的,只是在于你能否注意到这些细节。

Flex Builder 3 ActionScript工程Preloader的制作

1. 新建ActionScript工程 Ex:Preloader
2. 设置工程属性->ActionScript Compiler->Additional compiler arguments: -frame start Main
3. 添加Main.as
4. 代码:

Preloader.as

Main.as

运行时获得flash的宽度和高度

应该用loaderInfo.width和loaderInfo.height。

Stage.stageWidth和Stage.stageHeight是舞台的大小,也就是播放器窗口或者浏览器插件的显示大小。

不能用Stage.width和Stage.height,也不能用root.width和root.height。

要注意的是,loaderInfo需要在swf加载完成之后才能访问,否则可能会报#2099错误。

更多信息请参考这篇文章:
http://bbs.actionscript3.cn/viewthread.php?tid=4943