Starling 1.3正式发布
![](http://images0.cnblogs.com/blog/384908/201301/19102344-eb8c70462e20486187722abdfede7f11.jpg)
言归正传,发布这篇博客的主要原因是:一个新的Starling版本诞生了!它包含了很多新的特性,让它的功能更加强大,同时保持性能像以前一样的快。我希望您能喜欢新的特性!
滤镜
Starling的最新版本包含了一个很多人期待已久的特性:滤镜。他们的工作方式和您之前在Flash中看到的传统滤镜非常相似---这意味着您可以直接使用显示对象的新属性"filter",并且指定一个滤镜类的实例。
下面是一个实例来演示如何使用。最上面的几行显示了"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建立关联,执行完自己执行下一个动画
这些特性的添加既可以让您减少很多重复代码,也不牺牲灵活性。
素材管理
每一个游戏或应用程序都需要素材管理---包括它的纹理,声音,位图字体,或其它对象。这些资源可以用嵌入的方式(对于浏览器游戏来说,将一切集中在一个文件中还是很有道理的),或通过路径引用它们(手机游戏需要谨慎使用内存)。有太多的方式可以引用您的素材,使得很难有统一的方式来访问它们。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上的更新日志。