android游戏开发框架libgdx的使用(二十三)—使用Universal Tween Engine实现动画效果

28 8月

libgdx的ui库可以实现一些动画效果,但是做游戏来说可能有些不足。Universal Tween Engine是一个纯java实现的动画库。

地址:http://code.google.com/p/java-universal-tween-engine/

只要能够用float表示的一切java对象它可以让它动画化,可以使用于Libgdx、Android、Swing等等。

Universal Tween Engine使用一般流程

使用Universal Tween Engine最重要的一个步骤就是实现TweenAccessor接口,这个接口定义了getValues和setValues方法。

然后Engine中注册对应的接口。然后定义一些动画效果并添加到管理器中。最后用update方法更新时间。

具体的可以参考一下Wiki:http://code.google.com/p/java-universal-tween-engine/wiki/GetStarted

在libgdx中实现简单动画

我比较喜欢使用Stage,所以下面的例子都是Stage中的。

首先实现TweenAccessor接口,我没有区分对待,比如给Image写一个,再给Button写个啥的。我直接给Actor写了一个,这样都可以用。

getValues和setValues中我定义了3中操作:只修改X值;只修改Y值;修改X和Y值。


 

这里注意一下getValues的返回值,你修改或者操作了几个值就返回几。

代码如下:


然后来写具体的动画和绘制部分。为了方便演示我编写一个随着点击移动的小图标的例子。

我的图标是news。声明image和stage的绘制和原来一样。

先声明一个动画管理器


然后将我们的Image注册一下


同时实现InputProcessor接口以接收触碰事件。

在touchDown方法中添加


说明一下,因为Stage的坐标和默认的Input的坐标不一致,所以通过unproject转化一下。

Tween.to(image, ActorAccessor.POSITION_XY, 1.0f)代表操作image对象移动。target(vector3.x, vector3.y)代表移动的目标。

ease(Bounce.OUT)声明了缓冲效果,具体的效果可以参考http://robertpenner.com/easing/easing_demo.html

start(tweenManager)启动管理器。

在render方法中添加


让管理器的时间更新。

完整代码:


因为是动画效果,这里就不贴出了,文章末尾会有一个小视频的。

使用TimeLine实现更多动画效果

上面只是一个简单的移动效果,但就动画而言这个显然是不够的。如果希望实现一个渐渐显示的效果怎么办?

还是想想TweenAccessor接口,只要float类型的值就行了。所以同样的我们可以实现修改透明程度、大小等等实现更多的效果。

我最终选用了六种效果:


实现修改X和Y值,修改X和Y值(包括对象自身大小),修改缩放,修改旋转,修改透明,修改颜色。

代码如下:


因为Actor中的color是final,所以不能修改,自己改一下源代码吧。

TimeLine是Universal Tween Engine中的一大利器,可以实现平行和顺序动画。

比如


就表示先移动到100,100处在移动到200,20处。

再比如


实现的就是一般移动一般旋转和放大的效果。

效果:

发表评论

电子邮件地址不会被公开。