新的一年开始了,是时候让我们的小鸟升级到一个新的版本了,让它来展示一下过去几个月中它学习到的新本领吧!
对我们的小鸟来说,2012年是惊人的一年。我特别高兴的是,围绕在小鸟周围的社区越来越大。您最近关注过论坛吗?每一天都有几十个新的帖子,而且这个数字还在不断增多。非常感谢所有访问我们网站的人,以及对我们的支持!此外,许多基于Starling编写的令人吃惊的游戏也发布了很多—看看这些比如,愤怒的小鸟星战版聪明的外星人疯狂过山车流氓队(这是其中的几个例子)!
Starling 1.3正式发布-风君雪科技博客
最后还有一些重要的事情,基于Starling的扩展和类库就如雨后春笋般,又如同超级马里奥游戏里的蘑菇一般,遍地开花!来看看DragonBones,一个2D的骨骼动画插件。接下来的几天,Feathers马上要迎来它的1.0的版本。并且Citrus游戏引擎的每次更新都相当激动人心。
 
Starling 1.3
 

言归正传,发布这篇博客的主要原因是:一个新的Starling版本诞生了!它包含了很多新的特性,让它的功能更加强大,同时保持性能像以前一样的快。我希望您能喜欢新的特性!

滤镜

Starling的最新版本包含了一个很多人期待已久的特性:滤镜。他们的工作方式和您之前在Flash中看到的传统滤镜非常相似—这意味着您可以直接使用显示对象的新属性”filter”,并且指定一个滤镜类的实例。

Starling 1.3正式发布-风君雪科技博客

下面是一个实例来演示如何使用。最上面的几行显示了”BlurFilter”的各种用途,底下的几行显示了”ColorMatrixFilter”如何使用。

 

下面是一些源代码,告诉您如何来做:

 

// 这个滤镜可以实现阴影和发光
var blur:BlurFilter = new BlurFilter();
var dropShadow:BlurFilter = BlurFilter.createDropShadow();
var glow:BlurFilter = BlurFilter.createGlow();

 

//ColorMatrixFilter 包含了很多有用的方法
var colorMatrixFilter:ColorMatrixFilter = new ColorMatrixFilter();
colorMatrixFilter.invert();                // 反转图片颜色
colorMatrixFilter.adjustSaturation(-1);    // 设置图片灰度
colorMatrixFilter.adjustContrast(0.75);    // 提高对比度
colorMatrixFilter.adjustHue(1);            // 改变色调
colorMatrixFilter.adjustBrightness(-0.25); // 降低亮度

 

// 要使用滤镜, 只需要设置 “filter”属性
sprite.filter = anyFilter;

由于滤镜是由GPU执行的,它们运行的很快。此外,滤镜的API很容易扩展:只需要一些AGAL代码,您就可以编写自己的滤镜。在接下来的几天中,我将在WIKI中添加一篇教程来说明如何做到这一点。

动画增强

在之前我们提到过,Starling的新版优化了事件体系,现在是时候对Tween接口进行一些优化了。

 

虽然独立的Tween和Juggler都是非常强大的工具,但有时候确实让您为了简单的任务编写了很多代码。这就是为什么我要为Juggler添加一个方便的方法,来让您用更简练的方式使用Tween。下面是示例代码:

Starling.juggler.tween(object, 1.5, {
   transition: Transitions.EASE_IN_OUT,
   repeatCount: 3,
   onComplete: function():void { startButton.enabled = true; },
   x: 300,
   y: 360,
   rotation: deg2rad(90)
});

这将从缓存池中获取一个Tween对象,并将它添加到Juggler中。在{}参数中,简单地列出您希望为动画添加的所有属性,以及Tween本身的属性。您有没有在上面的代码中注意到repeatCount这个属性?这是Tween类新增加的几个特性中的一个:

repeatCount和reverse属性,可以让您重复执行某个动画,并设置重复次数(比如一个滑球效果)
nextTween属性可以让它和别的Tween建立关联,执行完自己执行下一个动画

这些特性的添加既可以让您减少很多重复代码,也不牺牲灵活性。

Starling 1.3正式发布-风君雪科技博客

素材管理

每一个游戏或应用程序都需要素材管理—包括它的纹理,声音,位图字体,或其它对象。这些资源可以用嵌入的方式(对于浏览器游戏来说,将一切集中在一个文件中还是很有道理的),或通过路径引用它们(手机游戏需要谨慎使用内存)。有太多的方式可以引用您的素材,使得很难有统一的方式来访问它们。AssetManager可以帮您来做这件事。这个类允许您添加各种各样的素材,并轻松访问它们。要开始使用这个新的类,请参考Starling WIKI: 它包含了一篇教程和一些示例代码。Starling的两个示例项目,即”Scaffold”和”Demo”使用了这个类。看看这两个项目,您就明白如何在您的代码中使用这个类了。

缩放模式

在Stage3D还未到来之前,Flash开发人员使用StageScaleMode来定义舞台应该显示在Flash Player的哪个区域中。现在这个特性回来了(Starling中可用了)—至少精神上如此:)。在Starling中,您是通过viewPort这个矩形来定义显示区域的。现在,一个新的方法,可以让您通过过去熟知的scaleMode来设置viewPort属性。比如说,您希望您的游戏可以自动缩放,并且完整填充Flash Player的显示区域,同时保持宽高比不变(不裁剪任何东西)。您要做的就是在stage上侦听Event.RESIZE事件,并更新viewPort,就像下面这样:
private function onResize(event:Event, size:Point):void
{
    Starling.current.viewPort = RectangleUtil.fit(
        new Rectangle(0, 0, stage.stageWidth, stage.stageHeight),
        new Rectangle(0, 0, size.x, size.y),
        ScaleMode.SHOW_ALL);
}

如果您使用 NO_BORDER来代替,那么您的游戏就会被裁剪。使用NONE则只是将它在窗体里面居中。这对于移动开发是非常有用的,可以让您适配各种不同的分辨率。

总结

和往常一样,一篇博客无法告诉您在这个版本中发生的所有变化。Starling 1.3包含了很多的错误修正,和很多小的改进和完善之处。要查看所有的特性列表,请查阅在GitHub上的更新日志