优化 AS3 代码提高性能

原文:Learn to Optimise your AS3 Code for Speed and Performance
作者:Michael James Williams
翻译:dreamana.com

※译者注:这是一篇关于程序优化的通俗易懂的文章,简明扼要。

“优化”是指使你的代码更有效率。通常你会优化它的速度 ——不是使游戏玩得更快,但要使游戏运行得流畅不卡。

(如果你的 SWF 比你想象中的几 MB 大,你可能想优化它的大小,但是这是另一个话题需要另外再讨论。)

各种各样的技巧去实现优化归结成一条原则就是:

Don’t make Flash do more work than it needs to 不要让 Flash 做超过它需要做的工作。

CCD 算法实现

视频游戏 UI 设计:叙事理论

原文:Video game user interface design: Diegesis theory
作者:Dave Russell
摘录:dreamana.com

Porting...

尝试将 pmd 解析部分地移植到 Away3D 4.x

以后有时间再继续完善,现在这个实验只是 半成品,混合了一些 PV3D 的代码片段,代码很糟糕

2013-12-05 updated

仔细研究过 MD5MeshParser.as 之后,大概明白类 Away3D 的骨骼动画如何组织。之后才发现官方论坛里其实已经 有人总结过

MonoUI 2?

自从制作了一套自用的 UI 组件集之后,使用过程中我发现仍然有各种不顺心的地方。可能思维被 Flash 传统的 UI 组件固化了。于是萌生出制作第二版的想法。

但,真的能突破吗?

首先,我打算弃用 MonoUI 这个名字,原因就是已经有一个叫 Mono 的东东了,很容易会被人误会我这个是 .Net 的 Mono…

那么新名字先放一边,如何改进才是麻烦事。使用 Flash 做 GUI,渲染方式现在只有 2 种选择:

  1. 传统 DisplayList
  2. Stage3D

考虑到日后项目的通用性,我觉得必然要选用 DisplayList。然而麻烦的根源也是这里:

DisplayList 的架构没办法改变。

  • 不能通过继承 DisplayObject/DisplayObjectContainer/InteractiveObject 实现自己的显示对象
  • 作为容器只能选择继承 Sprite
  • Bitmap 不具备交互能力(不继承 InteractiveObject)
  • 单纯使用 Graphics 或单纯使用 BitmapData 各有优劣(即使用全矢量或使用全位图都不是最优的办法)
  • 涉及 AS3 Event 模型(AS3 事件模型也有各种不治之症),主要是鼠标交互方面

以上种种,导致使用 DisplayList 作为 UI 渲染方式的时候性能优化很有限。尤其是实现皮肤功能的时候,简化显示列表会变得困难,但想实现动态皮肤,又不得不利用更多显示层级来实现。

AIR for iOS 开发杂记

以下步骤是开发用于 iOS 的 AIR 应用程序的典型步骤:

  • 安装 iTunes。
  • 在 Apple iOS Provisioning Portal 上生成必需的开发人员文件和 ID。这些项目包括:
    • 开发人员证书
    • 应用程序 ID
    • 供给配置文件
  • 在创建供给配置文件时,必须列出您计划要安装应用程序的任意测试设备的 ID。
  • 将开发证书和私钥转换为 P12 keystore 文件。
  • 编写应用程序 ActionScript 或 MXML 代码。
  • 利用 ActionScript 或 MXML 编译器编译应用程序。
  • 创建应用程序的图标图片和初始屏幕图片。
  • 创建应用程序描述符(使用 2.6 或更高版本的命名空间)。
  • 使用 ADT 对 IPA 文件打包。
  • 使用 iTunes 将您的供给配置文件放置在您的测试设备上。
  • 在您的 iOS 设备上安装和测试应用程序。您可以使用 iTunes 或通过 USB 使用 ADT(AIR 3.4 和更高版本支持 USB)来安装 IPA 文件。

您的 AIR 应用程序一经完成,您可以使用分发证书和供给配置文件重新对其进行打包。然后,就可以将其提交到 Apple 应用程序库。

Flash Runtime 版本对照

注:目前 AIR 33.0 后继版本交由 HARMAN 维护

让 ByteArray 更快

原文:Making ByteArray faster
作者:Romil Mittal
翻译:dreamana.com

FlasCC (之前叫 Alchemy) 生成的 ActionScript 字节码 (简称 .abc) 比起用 ActionScript 编译器实现的性能更好。除了因为用了更好的数据类型和指令之外,背后的一个主要原因是 FlasCC 使用了 domain memory,使其在内存缓冲区中读写速度更快。Flash 与 AIR Runtime 已经支持这些特殊的内存操作码去使用 domain memory 提高内存访问速度。

从 AIR 3.6 开始,ActionScript 编译器 2.0 (ASC2) 能够直接从 AS3 代码编译出这些快速内存操作码了(之前只能通过 FlasCC 实现)。

Finite State Machine

有限状态机

Ash 的组件控制方案出来了,引入了 FSM(有限状态机)。之前有人提问 (见 Ash issue #14) 使用 Ash 框架去编码如何去实现游戏的各种状态。我在学习 Ash 的过程也有类似的困惑,可能是习惯了 OOP(面向对象编程),所以用实体系统框架开发的时候会有点不顺手。但其实这类框架本身是很灵活的。

问题的关键是:如何去控制这些组件。

2012-12-26 updated

Premultiplied Alpha

出处:Nothing But The Truth | Premultiplied Alpha

What is “Alpha"?

“Alpha” 指的是「不透明度」= “Opacity”。Alpha 值越大,則越不透明。本文將以 a 代替 Alpha。

What is “Alpha Blending"?

Alpha Blending 是指當有兩個 Pixel 在同一個位置時,且上方的 Pixel 為「透明的」(也就是其 alpha < 1),如此一來,後方的 Pixel 就應該會“透出“來。

事實上 Alpha Blending 也就是我們常說的 Compositing。

Tags