android游戏开发框架libgdx的使用(六)--演员和演出
转载声明:http://www.cnblogs.com/htynkn/archive/2011/11/18/libgdx_6.html
上一篇说到UI,然后之前说到舞台,现在我们可以很轻松的构建一出戏了。
因为actor类在绘制是以x,y值为基准,所以我们可以通过控制x,y值变化演员的位置,但是演员的其他效果需要配合Action类进行操作。
Action类是一个抽象类,所有的具体实现都在com.badlogic.gdx.scenes.scene2d.actions包中。
而包中的类依功能而言可以分为两类:
- 控制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。
Remove $ ()
删除所有Action。
表现类:
1 FadeIn $ (float duration) 2 3 FadeOut $ (float duration)
淡入淡出效果
1 FadeTo $ (float alpha, float duration)
duration秒改变至alpha。
1 MoveTo $ (float x, float y, float duration) 2 3 MoveBy $ (float x, float y, float duration)
用duration移动到x,y处。
1 RotateBy $ (float rotation, float duration) 2 3 RotateTo $ (float rotation, float duration)
用duration秒旋转rotation度。
ScaleTo $ (float scaleX, float scaleY, float duration)
缩放x到scaleX,y到scaleY,用时duration秒。
一个个写例子太麻烦了,而且实际运用中也多是多个组合运用,下面来看一个综合性的示例:
通过action的组合实现闪烁,飞动,旋转等效果。
代码如下:
1 package com.cnblogs.htynkn.listener; 2 3 import com.badlogic.gdx.ApplicationListener; 4 import com.badlogic.gdx.Gdx; 5 import com.badlogic.gdx.graphics.GL10; 6 import com.badlogic.gdx.graphics.Texture; 7 import com.badlogic.gdx.graphics.Texture.TextureFilter; 8 import com.badlogic.gdx.math.MathUtils; 9 import com.badlogic.gdx.scenes.scene2d.Action; 10 import com.badlogic.gdx.scenes.scene2d.Stage; 11 import com.badlogic.gdx.scenes.scene2d.actions.FadeIn; 12 import com.badlogic.gdx.scenes.scene2d.actions.FadeOut; 13 import com.badlogic.gdx.scenes.scene2d.actions.MoveBy; 14 import com.badlogic.gdx.scenes.scene2d.actions.MoveTo; 15 import com.badlogic.gdx.scenes.scene2d.actions.Parallel; 16 import com.badlogic.gdx.scenes.scene2d.actions.Repeat; 17 import com.badlogic.gdx.scenes.scene2d.actions.RotateTo; 18 import com.badlogic.gdx.scenes.scene2d.actions.Sequence; 19 import com.badlogic.gdx.scenes.scene2d.actors.Image; 20 21 public class FirstGame implements ApplicationListener { 22 23 private Stage stage; 24 private Texture texture; 25 26 @Override 27 public void create() { 28 stage = new Stage(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), 29 true); 30 texture = new Texture(Gdx.files.internal("star.png")); 31 texture.setFilter(TextureFilter.Linear, TextureFilter.Linear); 32 float duration = 4f; 33 int maxwidth = Gdx.graphics.getWidth() - texture.getWidth(); 34 int maxheight = Gdx.graphics.getHeight() - texture.getHeight(); 35 36 for (int i = 0; i < 20; i++) { 37 Image image = new Image("star" + i, texture); 38 image.x = MathUtils.random(0, maxwidth); 39 image.y = MathUtils.random(0, Gdx.graphics.getHeight()); //随机出现 40 Action moveAction = Sequence.$(MoveTo.$(MathUtils.random(0, 41 maxwidth), MathUtils.random(0, maxheight), duration / 2), 42 MoveBy.$(MathUtils.random(0, maxwidth), MathUtils.random(0, 43 maxheight), duration / 2)); //移动方向和地点随机 44 Action rotateAction = RotateTo.$(360, duration); //旋转 45 Action fadeAction = Repeat.$(Sequence.$(FadeOut.$(duration / 20), 46 FadeIn.$(duration / 20)), 10); //闪烁,重复10次 47 image.action(Parallel.$(moveAction, rotateAction, fadeAction)); //所有action并行 48 stage.addActor(image); 49 } 50 Gdx.input.setInputProcessor(stage); 51 } 52 53 @Override 54 public void dispose() { 55 texture.dispose(); 56 stage.dispose(); 57 } 58 59 @Override 60 public void pause() { 61 // TODO Auto-generated method stub 62 63 } 64 65 @Override 66 public void render() { 67 Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 68 stage.act(Gdx.graphics.getDeltaTime()); 69 stage.draw(); 70 } 71 72 @Override 73 public void resize(int width, int height) { 74 // TODO Auto-generated method stub 75 76 } 77 78 @Override 79 public void resume() { 80 // TODO Auto-generated method stub 81 82 } 83 84 }
效果(图片有点大...多等等):
其实每个action的用法都很简单,主要问题是怎么组合排列来显示一种符合需求的效果。
我发现libgdx的更新不是一般快,每天都有几个版本的。那个通过文件配置UI样式让我觉得非常有意思,但是具体操作中有诸多问题。




浙公网安备 33010602011771号