SwitchingColor Shader

原文:SwitchingColor Shader
翻译:dreamana.com

你有看过这个 Nissan Juke 的网站专题吗?我在偶然在 Away3D showcase 里发现这个 microsite 的。很棒的美术,优雅的程序。自从我玩过许多 shader 之后,我立刻就对这个不可思议的 shader 作品产生兴趣。尤其这个“颜色切换”特效(当你点击汽车有色的区域并选择一个新颜色的时候)引起了我的注意。花了几个钟头的修修补补之后我做了一个 shader 出来,看起来很像。看!就点击方块的任意地方,却换到一个随机颜色。

Have you already seen the Nissan Juke webspecial? I came across this microsite on the Away3D showcase. Great artwork, neat programming. As I was playing a lot with shaders, I was immediately interested in the incredible shaderwork that was done here. Especially the “color switching” effect (when you click on a colored area of the car and select a new color), caught my attention. After some hours of tinkering I came up with a shader, which looks quite the same. Have a look! Just click on the block anywhere, to switch to a random color.

优化 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 做超过它需要做的工作。

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 渲染方式的时候性能优化很有限。尤其是实现皮肤功能的时候,简化显示列表会变得困难,但想实现动态皮肤,又不得不利用更多显示层级来实现。

让 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

Entity Systems

什么是游戏开发中的实体框架 ?

原文:What is an entity framework for game development?
作者:Richard Lord
翻译:dreamana.com

上星期我发布了 Ash,一个用于 ActionScript 游戏开发的实体框架 (Entity Framework),接着很多人问我“什么是实体框架?”。说来话长。

实体系统 (Entity Systems) 变得越来越流行,众所周知的比如 Unity,还有鲜有所闻的框架比如 Ember2, Xember 和我的 Ash 框架。有一个很好的理由:它们简化了游戏架构,促进在代码中职责分离得清楚,可以用得很乐。

在这篇文章里我将会引导你怎样从传统游戏循环 (Game Loop) 中发展到基于实体的架构。可能要花点时间。这里例子用 ActionScript 实现,因为我正在用这个语言,但是这架构可以应用在所有的编程语言上。

AS3 Code Snippet

some snippets for AS3

MonoUI 第一步

无论再怎么强大的 UI 组件库,个人觉得都不能适应各种项目的需求。而过分依赖 UI 组建构建应用,会导致交互设计单调。Flash 有个好处就是没有自带 UI 组件,不需要停留在 WIMP 的世界,但是为了迎合各种用户习惯,往往这却成了麻烦。

构建 MonoUI 的目的,不是为了提供几个见惯不怪的又不成型的 UI 组件。而是希望借此抛砖引玉,将 Flash 开发中不被重视又缺乏交流的一个方面提出来与大家共同探讨。

Stage3D 大冒险

——《Stage3D Game Programming Beginner’s Guide》阅读笔记

Molehill 是什么 ?

Molehill 是 Flash Stage3D 技术的开发代号(现在正式命名 Stage3D)。它能让下一代 Flash 游戏通过显卡 GPU 硬件加速去渲染 3D 图形(或成千上万个“精灵”),从而降低 CPU 负载。

Molehill 不是什么 ?

Molehill 是非常低层的 API,只提供基本的 3D 渲染功能。它不是一个游戏引擎(如 Unity3d 或者 Unreal 又或者 ID Tech),一个游戏引擎还包含物理模拟,音频,音乐,碰撞检测等等补充的游戏函数。取而代之的是,你可使用 Molehill 这样的低层 API 去制作你自己的游戏引擎。与 OpenGL 或 Direct3D 相似,Molehill 是一些非常基本的函数集合,是游戏和游戏引擎的基本构件。

AS3 文件上传

从 Flash 端将文件数据上传到服务端有各种各样的方法。

Tags