补间时播放声音

时间:2015-07-23 15:30:16

标签: java libgdx tween

在尝试实现我的想法时,我遇到了一个问题。

我有一个图像,我在它的alpha层之间,淡入它,一秒钟后淡出它。在这里,我希望在完全淡入的时候玩马里奥硬币。

我已尝试为此实现不同的回调,但无论哪种方式,我都会在补间之前或补间之后播放声音。

代码段:

Tween.set(splash, SpriteAccessor.ALPHA).target(0).start(tweenManager);
Tween.to(splash, SpriteAccessor.ALPHA, 2).target(1).repeatYoyo(1, 0.5f).setCallback(new TweenCallback() {
    @Override
    public void onEvent(int type, BaseTween<?> source) {
        ((Game) Gdx.app.getApplicationListener()).setScreen(new MainMenu());
    }
}).start(tweenManager);

做的:

Tween.set(splash, SpriteAccessor.ALPHA).target(0).start(tweenManager);
Tween.to(splash, SpriteAccessor.ALPHA, 2).target(1).repeatYoyo(1, 0.5f).setCallback(new TweenCallback() {
    @Override
    public void onEvent(int type, BaseTween<?> source) {
        SoundManager.PlayIntro();
        ((Game) Gdx.app.getApplicationListener()).setScreen(new MainMenu());
    }
}).start(tweenManager);

在补间后播放声音。

并且:

Tween.set(splash, SpriteAccessor.ALPHA).target(0).start(tweenManager)
    .setCallback(new TweenCallback() {
            @Override
            public void onEvent(int type, BaseTween<?> source) {
                SoundManager.PlayIntro();
            }
    });

Tween.to(splash, SpriteAccessor.ALPHA, 2).target(1).repeatYoyo(1, 0.5f).setCallback(new TweenCallback() {
    @Override
    public void onEvent(int type, BaseTween<?> source) {
        ((Game) Gdx.app.getApplicationListener()).setScreen(new MainMenu());
    }
}).start(tweenManager);

之前播放。我如何实现我想要的?

1 个答案:

答案 0 :(得分:3)

您可以通过使用补间引擎中的时间轴并创建序列来实现此目的,这是我对这些案例使用最多的内容。

这应该适合你:

Timeline.createSequence().beginSequence()
        .push(Tween.to(splash, SpriteAccessor.ALPHA, 0).target(0))
        .push(Tween.to(splash, SpriteAccessor.ALPHA, 2).target(1).setCallback(new TweenCallback() {
            @Override
            public void onEvent(int arg0, BaseTween<?> arg1) {
                SoundManager.PlayIntro();
            }
        }))
        .pushPause(0.5f)
        .push(Tween.to(splash, SpriteAccessor.ALPHA, 2f).target(0)).setCallback(new TweenCallback() {
            @Override
            public void onEvent(int arg0, BaseTween<?> arg1) {
                ((Game) Gdx.app.getApplicationListener()).setScreen(new MainMenu());
            }
        })
.start(tweenManager);