fadein使用libgdx,sin和java淡出

时间:2016-06-23 01:45:35

标签: java libgdx

我正在尝试创建一个使fadein和fadeout的功能。

我开始使用Math.sin()batch.setColor()将图片淡化为黑色,我不知道这是最好的方法,但我的想法是运行一个sin函数。

我知道有了sin函数我可以控制我的fadein / fideout时间,但我有两大问题:

  1. 我需要在senofloat == 0开始计数,在1开始时停止计数或从1开始计时,然后在0开始淡出,
  2. 我需要控制周期重复的次数,例如淡出1次淡出的时间
  3. 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++;
    

    我太复杂了吗?有更简单的方法吗?

2 个答案:

答案 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);
    //...
}

致电fadeOutfadeIn开始淡入淡出。如果需要,您可以将插值类型更改为Interpolation.fade。我认为它看起来比正弦褪色更好。

答案 1 :(得分:0)

最佳选择和更简单的方法是使用universal-tween-engine

非常容易使用和有效,因为它来自Aurelien Ribon