#Testin杯#Mkey libgdx游戏引擎教程(十二)演员类的复杂动画(三)(附源码)

66
回复
558746
查看
  [复制链接]

30

主题

350

帖子

1089

安币

Android大神

Rank: 6Rank: 6

QQ达人

发表于 2012-7-20 17:32:46 | 显示全部楼层 |阅读模式
本帖最后由 耒佲請ぁ留埗 于 2012-8-3 11:42 编辑


以下系列教程按讲课顺序排列,也是推荐阅读的顺序

第一讲:libgdx游戏引擎教程(一)性能优良的游戏引擎—libgdx http://www.apkbus.com/android-57355-1-1.html

第二讲: libgdx游戏引擎教程(二) ApplicationListener,着手第一个程序http://www.apkbus.com/android-57372-1-1.html

第三讲:libgdx游戏引擎教程()libgdx粒子系统的使用 http://www.apkbus.com/android-57456-1-1.html

外篇一:libgdx游戏引擎教程外篇(一)优美的自定义进度条(附源码) http://www.apkbus.com/android-57523-1-1.html

第四讲:libgdx游戏引擎教程(四) 游戏正式开始,资源异步加载(附源码)http://www.apkbus.com/android-57716-1-1.html

第五讲 libgdx游戏引擎教程(五)多游戏界面的实现(一)附源码 http://www.apkbus.com/android-57936-1-1.html

第六讲 libgdx游戏引擎教程(六)多游戏界面的实现(二)附源码 http://www.apkbus.com/android-57991-1-1.html  

第七讲 libgdx游戏引擎教程(七) 在libgdx中拦截Android按键事件 http://www.apkbus.com/android-58030-1-1.html  

外篇二: libgdx游戏引擎教程外篇(二)libgdx移植俄罗斯方块(附源码) http://www.apkbus.com/android-58102-1-1.html   

实战一:libgdx游戏引擎教程实战篇(一)移植俄罗斯方块(附源码) http://www.apkbus.com/android-58404-1-1.html  

实战二:libgdx游戏引擎教程实战篇(二)移植俄罗斯方块(附源码) http://www.apkbus.com/android-58408-1-1.html  

实战三:libgdx游戏引擎教程实战篇(三)移植俄罗斯方块(附源码) http://www.apkbus.com/android-58414-1-1.html  

实战四:libgdx游戏引擎教程实战篇(四)移植俄罗斯方块(附源码) http://www.apkbus.com/android-58418-1-1.html  

实战五:libgdx游戏引擎教程实战篇(五)移植俄罗斯方块(附源码) http://www.apkbus.com/android-58419-1-1.html

实战六:libgdx游戏引擎教程实战篇(六)移植俄罗斯方块(附源码) http://www.apkbus.com/android-58760-1-1.html

第八讲 libgdx游戏引擎教程(八) libgdx中的用户手势识别(一)附源码 http://www.apkbus.com/android-58933-1-1.html

第九讲 libgdx游戏引擎教程(九) libgdx中的用户手势识别(二)附源码 http://www.apkbus.com/android-59152-1-1.html

外篇三: libgdx游戏引擎教程外篇(三) 优美的自定义对话框(附源码) http://www.apkbus.com/android-59654-1-1.html  

第十讲:  libgdx游戏引擎教程(十)演员类的复杂动画(一)(附源码) http://www.apkbus.com/android-59998-1-2.html

第十一讲:libgdx游戏引擎教程(十一)演员类的复杂动画(二)(附源码) http://www.apkbus.com/android-60053-1-1.html

第十二讲:libgdx游戏引擎教程(十二)演员类的复杂动画(三)(附源码) http://www.apkbus.com/android-60194-1-1.html   

第十三讲: libgdx游戏引擎教程(十三)演员类的用户交互功能详解(附源码)  http://www.apkbus.com/android-60457-1-1.html

第十四讲:libgdx游戏引擎教程(十四)libgdx中常用的控件(附源码) http://www.apkbus.com/android-60569-1-1.html

最新更新 第十五讲 :libgdx游戏引擎教程(十五)在Libgdx中仿微信帮助滑动效果(附源码) http://www.apkbus.com/android-60822-1-1.html




本讲源代码:


接着十一讲的内容,我们接下来来试试多个动作的混合效果。我们在第十一讲的基础上继续做修改。

现在Progress.java添加一个MoveTo


  1. MoveTo move;
复制代码

show()中初始化并且和AnimalActor绑定:


  1. move=MoveTo.$(200, 200, 5f);
  2. animal.action(move);
复制代码

我们运行一下,发现并没有出现移动的效果,这是由于我们在第十一讲中AnimalActordraw()函数中没用到Actorx,y,因此即使MoveTo改变了Actorx,y值,依然不能直接显示出来,那么我们修改一下AnimalActordraw()函数,修改成:


  1. arg0.draw(currentFrame, x, y, 64*power, 64*power, 128*power, 128*power, 1, 1, this.rotation, true);
复制代码
们运行一下看看效果:



整体效果出来了,正是这个Actor在整体平移并且绕自身中心旋转。

那我们怎么实现动画的顺序播放呢?换一句话说,就是执行完一个动作再去执行第二个动作。我们可以在第一个动作中设置一个监听器OnActionCompleted,在第一个动作结束的时候调用Actoraction(Actionaction)方法,将第二个动作与Actor绑定

我们修改一下源代码,在Progress.java部分,MoveToRotate初始化处,原来的代码是这样的:
  1. roll=RotateTo.$(360, 5f);
  2. move=MoveTo.$(200, 200, 5f);
  3. animal.action(roll);
  4. animal.action(move);
复制代码
我们修改成这样:
  1. roll=RotateTo.$(360, 5f);
  2.        move=MoveTo.$(200, 200, 5f);
  3.        roll.setCompletionListener(new OnActionCompleted(){

  4.            @Override
  5.            public void completed(Action arg0) {
  6.               // TODO Auto-generated method stub
  7.               animal.action(move);
  8.               System.out.println("Rotate complete");
  9.            }
  10.          
  11.        });
  12.        animal.action(roll);
复制代码
运行一下看看效果:



除了用这种办法以外,Libgdx还提供了一个Action,Sequence





我们可以看到,Sequence类继承自CompositeAction,从字面意思理解就是混合动作的Action,我们不妨再看看CompositeAction的介绍:




我们发现它的直接子类有两个,一个是我们刚才提到的Sequence,另一个是Parallel,从字面意思理解我们就可以知道,Sequence中的Action是一个个按顺序触发的,上一个Action结束才会进行下一个Action,相反,Parallel中的Action则是同时开始的


那么我们既然知道了这两个Action可以做到这样的效果,那么我们不妨来试试看。我们先用Parallel来替代我们原先的代码,,我们将代码修改一下,把原来的MoveToRotate删除,添加Parallel

  1. Parallel parallel;
复制代码

show()中的代码改成:
  1. Parallel=Parallel.$(RotateTo.$(360, 5f),MoveTo.$(200, 200, 5f));
  2. animal.action(parallel);
复制代码

运行看一下效果:




效果和我们起初的时候一样。


现在我们改成用Sequence实现顺序动作,添加Sequence变量:

  1. Sequence sequence;
复制代码

show()中的代码改成:

  1. sequence=Sequence.$(RotateTo.$(360, 5f),MoveTo.$(200, 200, 5f));
  2. animal.action(sequence);
复制代码

运行一下,看一看效果:





效果还是和我们前面实现的顺序触发效果一样,而且相比之前方便了不少。另外我们还可以进行多层封装,就是将多个Sequence或者Parallel放在Sequence或者Parallel中,这样就能创造出不错的效果。


Testin ID:ilovemkey@gmail.com 总的而言这个平台真的非常好用!我正是用这个平台发现了现在写的这个应用的一些内存管理方面的问题。另外建议能够在测试报告中看到某一台机型在整个执行过程中的cpu和内存占用的变化情况,这样可以更快地锁定问题。感谢Itestin让测试变得轻松了太多太多!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

高端 高端 高端 高端 高端 高端  发表于 2012-10-12 12:37
君见一叶舟,出没风波里

0

主题

46

帖子

171

安币

程序猿

Rank: 2

发表于 2012-7-20 19:58:17 | 显示全部楼层
沙发吗?

30

主题

350

帖子

1089

安币

Android大神

Rank: 6Rank: 6

QQ达人

 楼主| 发表于 2012-7-20 21:59:13 | 显示全部楼层
大窝瓜 发表于 2012-7-20 19:58
沙发吗?

哈哈,是的
君见一叶舟,出没风波里

0

主题

46

帖子

171

安币

程序猿

Rank: 2

发表于 2012-7-21 01:20:06 | 显示全部楼层
我在俄罗斯方块的gamescreen中加了显示下个方块的功能.流程大概如下:首先判断nextbrick是否已生成,是则brick=nextbrick.clone();否则随机生成brick,程序执行看起来正常,就是偶尔会出现array index=-1的问题,logcat说错误出现在绘制temframe的那行,batch.draw(image[temframe[i][j]-1],.......不明白为什么会出现-1

30

主题

350

帖子

1089

安币

Android大神

Rank: 6Rank: 6

QQ达人

 楼主| 发表于 2012-7-21 09:29:16 | 显示全部楼层
大窝瓜 发表于 2012-7-21 01:20
我在俄罗斯方块的gamescreen中加了显示下个方块的功能.流程大概如下:首先判断nextbrick是否已生成,是则bri ...

好像我调试的时候也出现了这样的问题当时懒了一下没有改,我现在检查一下,找到了给你留言
君见一叶舟,出没风波里

0

主题

26

帖子

47

安币

程序猿

Rank: 2

发表于 2012-7-22 19:30:10 | 显示全部楼层
请楼主多写几篇博文,把各个类的使用方法都做一下介绍,支持楼主!

0

主题

46

帖子

171

安币

程序猿

Rank: 2

发表于 2012-7-22 22:02:07 | 显示全部楼层
代码研究不下去了,用PS制作了一个800x480 Tetris素材,给各位分享一下,
http://115.com/file/be5c67vs#素材.psd
水平不高,大家别笑话我{:Skateboard:}

30

主题

350

帖子

1089

安币

Android大神

Rank: 6Rank: 6

QQ达人

 楼主| 发表于 2012-7-22 22:39:54 | 显示全部楼层
大窝瓜 发表于 2012-7-22 22:02
代码研究不下去了,用PS制作了一个800x480 Tetris素材,给各位分享一下,
http://115.com/file/be5c67vs#素 ...

可能是我代码写的太乱了,不好意思啊
君见一叶舟,出没风波里
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )