我正在尝试创建一个使fadein和fadeout的功能。
我开始使用Math.sin()
和batch.setColor()
将图片淡化为黑色,我不知道这是最好的方法,但我的想法是运行一个sin函数。
我知道有了sin函数我可以控制我的fadein / fideout时间,但我有两大问题:
senofloat == 0
开始计数,在1开始时停止计数或从1开始计时,然后在0开始淡出, tempo
是一个全局变量
tempo = Gdx.graphics.getDeltaTime();
这就是我在渲染功能上所拥有的:
float periudo=2;
float escala = 1;
senofloat = (float) (Math.sin(tempo*2*Math.PI/periudo)*(escala/2) + (escala/2));
batch.setColor(1, 1, 1, senofloat);
tempo++;
我太复杂了吗?有更简单的方法吗?
答案 0 :(得分:1)
您可以使用Scene2D操作执行此操作。
private Actor actionManager = new Actor(); //use a Stage instead if using one anyway
private final Color fadeColor = new Color ();
private static final Color FADED = new Color(1,1,1,0);
private void fadeOut (float duration){
ColorAction colorAction = Actions.color(FADED, duration, Interpolation.sine);
colorAction.setColor(fadeColor);
actionManager.addAction(colorAction);
}
private void fadeIn (float duration){
ColorAction colorAction = Actions.color(Color.WHITE, duration, Interpolation.sine);
colorAction.setColor(fadeColor);
actionManager.addAction(colorAction);
}
public void render (){
//...
actionManager.act(Gdx.graphics.getDeltaTime());
batch.setColor(fadeColor);
//...
}
致电fadeOut
或fadeIn
开始淡入淡出。如果需要,您可以将插值类型更改为Interpolation.fade
。我认为它看起来比正弦褪色更好。
答案 1 :(得分:0)
最佳选择和更简单的方法是使用universal-tween-engine
非常容易使用和有效,因为它来自Aurelien Ribon