现在的位置: 首页 > 综合 > 正文

Libgdx为何去掉了Action类中的setCompletionListener

2013年04月24日 ⁄ 综合 ⁄ 共 997字 ⁄ 字号 评论关闭

Action类在libgdx中是一个动作类,它可以让精灵实现很多动作,比如移动,旋转,缩放等等。通常我们希望在动作结束后能获得一个消息,这样以便于我们在动作结束后做一些其他的处理。按照java传统的思想,要想获得动作结束的消息,我们需要为Action对象增加一个监听器,这样在0.9.7版之前的libgdx中Action类是带有setCompletionListener这个函数的。但在0.9.7版之后这个函数消失了。。。。。这让我苦恼了一下午,没有了监听器,我该如何知道这个动作是否结束了?经过一下午查找翻阅资料,终于在官方文档中找到了答案。原来libgdx在0.9.7版后用另外一种方式实现了动作结束的事件响应。

先列出两种方式的代码.

监听器方式:

move.setCompletionListener(new OnActionCompleted(){
	@Override
	public void completed(Action arg0) {
		// TODO Auto-generated method stub
		System.out.println("MoveTo Complete!");
	}
});

新方式

Actions:{
	r.addAction(sequence(moveBy(32,0,1),rotateBy(10),run(new Runnable(){
		@Override
		public void run() {
			System.out.println("All action is completed");
		}
	})));
}

新方式的不仅使用了类似函数式编程的匿名函数写法,还可以同时执行多个动作。如果用以前的方式来实现新方式这小段代码的功能要多写很多代码。可以看出作者在不断开发学习过程中也深受了函数式编程思想的影响

如果大家不喜欢Action:{}这种写法,还可以引入静态包,用以下方式实现:

import static com.badlogic.gdx.scenes.scene2d.actions.Actions.*; 
.
.
.
r.addAction(sequence(moveBy(32,0,1),rotateBy(10),run(new Runnable(){
	@Override
	public void run() {
		System.out.println("All action is completed");
	}
})));

真是太喜欢这种新方式的写法了。

抱歉!评论已关闭.