News:Starling1.4

来自Starling中文站
跳转到: 导航, 搜索

原文:http://gamua.com/blog/2013/09/starling-14/

目录

Starling 1.4正式发布

时间过得很快,是不是?不管你相信与否,从Starling的上一个版本发布到现在,已经过去了半年多了。换句话说,也该做一次更新了! 女士们,先生们,请系好安全带:Starling 1.4闪亮登场!

概述

这个版本的更新主要围绕着各种改进。在Starling代码中有N处修改,可以让你的游戏运行更快,更稳定,而你的代码什么都不用改。我们也增加了新的AIR特性支持,包括新的纹理选择(4K支持,矩形纹理,16位纹理),还有iOS的后台执行(AIR 3.9的新特性).

当然,如果不添加一些引入注目的新特性,就枉费了Starling框架的盛名!下面介绍新特性:

性能提升

在整个框架中我做了很多改进,使得它更有效率。比如:现在ENTER_FRAME事件的派发采用了一种更智能的方式,只派发给注册了这个事件类型侦听的对象。

另外:我们的显示对象类优化了内部的矩阵运算(对于渲染动画非常重要)。此外,我们使用了Adobe的Scout软件分析了AOT编译器的内存分配过程。通过减少对垃圾收集器的触发,可以有效避免你的游戏中间卡顿。

总之,这些可以为你带来大约10%的性能提升。

裁剪区域

现在你可以为任何显示对象容器设置一个矩形的遮罩了。新的"clipRect"属性可以做到这一点,只有包含在这个矩形区域内的对象才会被渲染。而且非常棒的是,它对性能的影响非常小:只是额外增加了一次对绘制的调用!

sprite.clipRect = new Rectangle(20, 40, 200, 100);

要查看运行效果,请移步Starling Demo中的Clipping部分

动态扭曲滤镜

这是一个我觉得很牛逼的一个功能。DisplacementMapFilter(即动态扭曲滤镜),你可能在传统的Flash中已经使用过了,虽然它常常被忽视,但它真的功能强大!它允许你动态扭曲一个显示对象的像素。如果你掌握了这种滤镜,就可以实现各种惊人的特殊效果。下面就是这样一个例子:动态水波倒影。

点右键另存到电脑观看

想在自己的游戏里使用这个特性,可以参考这里的代码

更好的处理上下文丢失

除苹果以外的所有设备上,你必须激活“Starling.handleLostContext”,来确保你的游戏不会因为系统崩溃丢失设备上下文(无论何种原因)。此前的Starling版本,会在内存中保留所有的纹理数据,以便丢失上下文的情况下能够恢复这些纹理。

新的版本将使用另一种方式,即从原来的纹理来源(如位图)中重新加载纹理。这意味着Starling的总体内存大约减少50%。这可是个巨大的差异,特别是在移动设备上。如果你使用了AssetManager类,这些是自动完成的。只需更新到Starling 1.4,就大功告成!

如果你是手动管理素材的,也好办。你可以很容易实现自己的优化过程。只需要在上下文丢失的时候,使用纹理类新增加的"onRestore"方法。示意:

texture.root.onRestore = function():void
{
    // restore the texture from its original source
    texture.root.uploadBitmap(new EmbeddedAsset());
};

这个回调方法,将从纹理的原始来源恢复纹理(比如一个文件或嵌入式资源),因此,你不必在内存中保留纹理。

增强的素材管理类

除了优化上下文丢失的情况,AssetManager还有一些其它的新花样。除了纹理和声音,它还可以处理:通用的XML,JSON,甚至是ByteArray。

  • 任何PNG,JPG或GIF都可以转换为纹理
  • 任何MP3可以转换为声音
  • 纹理图集和位图字体将会自动识别
  • 新增:对于JSON文件,自动初始化为一个通用的对象。对于游戏配置和翻译来说非常有用。
  • 新增:对于XML文件来说亦是如此。
  • 新增:其它所有的数据,都会作为原始的字节数组。

对4K-矩形纹理的支持

过去我听的最多的声音就是:有莫有办法使用比2048*2048更大的纹理?

好了,现在可以用了!这是AIR3.8新增的一个特性。通过为你的游戏配置Context3DProfile.BASELINE_EXTENDED,你可以使用4096*4096的纹理。(需确保你的设备是支持的)

第二个有用的AIR新特性就是对矩形纹理的支持。正如你之前知道的,所有Stage3D的纹理都必须符合2的幂数的规则。Starling向你隐藏了这个过程,但它是需要付出额外的存储的代价的。

Starling 1.4将会在内部自动使用矩形纹理(如果可用的话),来为你节省更多的内存。(必须结合BASELINE设置)

HiDPI即MacBook视网膜屏幕支持

要使用最新的MacBook惊人的分辨率,你可以使用和手机游戏相同的技术。只需要载入两种比例的纹理并设置supportHighResolutions属性为true。搞定!

如果你已经用这样的硬件来阅读这篇博客,我很羡慕你:-)

仔细观察上面的水波反射的例子,你会发现,它是使用了全分辨率的。

其它特性

篇幅有限,无法介绍所有的变更。请查询更新日志。下面是一些比较重要的:

  • 增加TextField.autoSize
  • 增加stage.drawToBitmapData, 用于截图
  • 增加对"packed" 纹理支持,和运行时的纹理压缩(后者仅限桌面支持)
  • 增加对新的ATF文件格式支持
  • 添加 'suspendRendering' 参数到'Starling.stop()' 方法 (为AIR 3.9后台执行提供支持)
  • 增加Event.TEXTURES_RESTORED事件
  • 支持自定义的触屏事件
  • 更新的键盘事件:至所有的显示对象
  • 'DisplayObjectContainer.sortChildren()' 使用更稳定的排序算法
  • 修复既支持鼠标也支持触屏设备的多点事件问题
  • 修复'MovieClip.advanceTime()'的问题
  • 修复HOVER事件丢失的问题

总结

你觉得如何?值得升级,对不对?如果有什么想法,欢迎在下面评论!

和往常一样,我收到了来自社区的很多帮助。感谢大家的继续支持!没有你们,是没有Starling今天的成就的,伙计们!

还有一件事:我们的游戏后端服务,即Flox,也马上要结束Beta阶段了。还没用过?快去试试。

最后,附上Starling 1.4的下载链接


翻译:郭少瑞

原文偏向口语化,译者能力有限,尽力而为,请尽量阅读原文

个人工具
名字空间

变换
操作
导航
Starling中文资料
Starling原创教程
论坛
友链
工具箱