android游戏开发框架libgdx的使用(六)--演员和演出

转自:http://www.apkbus.com/forum.php?mod=viewthread&tid=19753&extra=page%3D1%26filter%3Dauthor%26orderby%3Ddateline%26orderby%3Ddateline

 

 

上一篇说到UI,然后之前说到舞台,现在我们可以很轻松的构建一出戏了。

因为actor类在绘制是以x,y值为基准,所以我们可以通过控制x,y值变化演员的位置,但是演员的其他效果需要配合Action类进行操作。

Action类是一个抽象类,所有的具体实现都在com.badlogic.gdx.scenes.scene2d.actions包中。

1.jpg

2012-1-17 12:11 上传
下载附件(33.09 KB)

而包中的类依功能而言可以分为两类:

  • 控制Action
  • 表现Action

控制Action没有直接表现效果,它操作的对象是表现Action。

比如Delay。

表现Action就是直接的表现效果,继承自AnimationAction,操作对象是Actor。

比如MoveTo。

现在挨着说吧:

控制类:


  1. Delay $ (Action action, float duration)
复制代码
延迟duration秒执行action。

  1. Forever $ (Action action)
复制代码
一直执行action。

  1. Parallel $ (Action... actions)
复制代码
并行(同时)执行actions。

  1. Repeat $ (Action action, int times)
复制代码
重复action times次。

  1. Sequence $ (Action... actions)
复制代码
按顺序执行actions。

  1. Remove $ ()
复制代码
删除所有Action。表现类:
  1. FadeIn $ (float duration)

  2. FadeOut $ (float duration)
复制代码
淡入淡出效果
  1. FadeTo $ (float alpha, float duration)
复制代码
duration秒改变至alpha。
  1. MoveTo $ (float x, float y, float duration)

  2. MoveBy $ (float x, float y, float duration)
复制代码
用duration移动到x,y处。
  1. RotateBy $ (float rotation, float duration)

  2. RotateTo $ (float rotation, float duration)
复制代码
用duration秒旋转rotation度。
  1. ScaleTo $ (float scaleX, float scaleY, float duration)
复制代码
缩放x到scaleX,y到scaleY,用时duration秒。一个个写例子太麻烦了,而且实际运用中也多是多个组合运用,下面来看一个综合性的示例:我们的主角是 2.png
2012-1-17 12:11 上传
下载附件(4.18 KB)
通过action的组合实现闪烁,飞动,旋转等效果。代码如下:
  1. package com.cnblogs.htynkn.listener;

  2. import com.badlogic.gdx.ApplicationListener;
  3. import com.badlogic.gdx.Gdx;
  4. import com.badlogic.gdx.graphics.GL10;
  5. import com.badlogic.gdx.graphics.Texture;
  6. import com.badlogic.gdx.graphics.Texture.TextureFilter;
  7. import com.badlogic.gdx.math.MathUtils;
  8. import com.badlogic.gdx.scenes.scene2d.Action;
  9. import com.badlogic.gdx.scenes.scene2d.Stage;
  10. import com.badlogic.gdx.scenes.scene2d.actions.FadeIn;
  11. import com.badlogic.gdx.scenes.scene2d.actions.FadeOut;
  12. import com.badlogic.gdx.scenes.scene2d.actions.MoveBy;
  13. import com.badlogic.gdx.scenes.scene2d.actions.MoveTo;
  14. import com.badlogic.gdx.scenes.scene2d.actions.Parallel;
  15. import com.badlogic.gdx.scenes.scene2d.actions.Repeat;
  16. import com.badlogic.gdx.scenes.scene2d.actions.RotateTo;
  17. import com.badlogic.gdx.scenes.scene2d.actions.Sequence;
  18. import com.badlogic.gdx.scenes.scene2d.actors.Image;

  19. public class FirstGame implements ApplicationListener {

  20. private Stage stage;
  21. private Texture texture;

  22. @Override
  23. public void create() {
  24. stage = new Stage(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(),
  25. true);
  26. texture = new Texture(Gdx.files.internal("star.png"));
  27. texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
  28. float duration = 4f;
  29. int maxwidth = Gdx.graphics.getWidth() - texture.getWidth();
  30. int maxheight = Gdx.graphics.getHeight() - texture.getHeight();

  31. for (int i = 0; i < 20; i++) {
  32. Image image = new Image("star" + i, texture);
  33. image.x = MathUtils.random(0, maxwidth);
  34. image.y = MathUtils.random(0, Gdx.graphics.getHeight()); //随机出现
  35. Action moveAction = Sequence.$(MoveTo.$(MathUtils.random(0,
  36. maxwidth), MathUtils.random(0, maxheight), duration / 2),
  37. MoveBy.$(MathUtils.random(0, maxwidth), MathUtils.random(0,
  38. maxheight), duration / 2)); //移动方向和地点随机
  39. Action rotateAction = RotateTo.$(360, duration); //旋转
  40. Action fadeAction = Repeat.$(Sequence.$(FadeOut.$(duration / 20),
  41. FadeIn.$(duration / 20)), 10); //闪烁,重复10次
  42. image.action(Parallel.$(moveAction, rotateAction, fadeAction)); //所有action并行
  43. stage.addActor(image);
  44. }
  45. Gdx.input.setInputProcessor(stage);
  46. }

  47. @Override
  48. public void dispose() {
  49. texture.dispose();
  50. stage.dispose();
  51. }

  52. @Override
  53. public void pause() {
  54. // TODO Auto-generated method stub

  55. }

  56. @Override
  57. public void render() {
  58. Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
  59. stage.act(Gdx.graphics.getDeltaTime());
  60. stage.draw();
  61. }

  62. @Override
  63. public void resize(int width, int height) {
  64. // TODO Auto-generated method stub

  65. }

  66. @Override
  67. public void resume() {
  68. // TODO Auto-generated method stub

  69. }

  70. }
复制代码
效果(图片有点大...多等等):
其实每个action的用法都很简单,主要问题是怎么组合排列来显示一种符合需求的效果。我发现libgdx的更新不是一般快,每天都有几个版本的。那个通过文件配置UI样式让我觉得非常有意思,但是具体操作中有诸多问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值