补间时播放声音

Playing sound while tweening

我 运行 在尝试实现我的想法时遇到了问题。

我有一个图像,我对其 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);

以前玩过。如何实现我想要的?

您可以通过使用补间引擎的时间轴并创建一个序列来实现这一点,这是我在这些情况下使用最多的方法。

这应该适合你:

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);