将UniversalTweenEngine与LibGDX音乐

时间:2016-04-09 18:52:23

标签: libgdx tween

简短的问题......

如何在LibGDX中使用UniversalTweenEngine类正确使用Music

长问题......

我在LibGDX中使用UniversalTweenEngineMusic类时遇到了问题。我有MusicAccessor实现TweenAccessor,如此:

public static final int VOLUME = 0;

@Override
public int getValues(Music target, int tweenType, float[] returnValues) {
    switch(tweenType) {
    case VOLUME:
        returnValues[0] = target.getVolume();
        return 1;
    default:
        assert false;
        return -1;
    }
}

@Override
public void setValues(Music target, int tweenType, float[] newValues) {
    switch(tweenType) {
    case VOLUME:
        target.setVolume(newValues[0]);
        break;
    default:
        assert false;
    }
}

首先我这样使用它:

Tween.registerAccessor(Music.class, new MusicAccessor());
myMusicInstance.setVolume(0);
Tween.to(myMusicInstance, MusicAccessor.VOLUME, 1f).target(1).start();

这给了我一个错误说

  

未找到目标

的TweenAccessor

我读了一些关于这个问题并看到有同样问题的人,this问题的答案告诉我,我也必须使用.cast(Music.class),所以我把它更改为:< / p>

Tween.to(myMusicInstance, MusicAccessor.VOLUME, 1f).cast(Music.class).target(1).start();

不再给我错误。与此相关的障碍是它实际上没有任何值!我已在TweenCallback方法中添加了System.out.println("text")并完成了TweenAccessor,并发现它们未被调用。那我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

我重现了你的问题并设法修复它,所以这是一个解决方案。 首先,您需要一个TweenManager的实例。然后不要忘记开始你的音乐(它不会自己启动)。你的MusicAccessor课程没问题,所以不需要改变任何东西。最终的代码片段:
实例字段

private TweenManager tweenManager = new TweenManager();

构造函数(或您使用它的任何地方)

Tween.registerAccessor(Music.class, new MusicAccessor());
myMusicInstance.setVolume(0);
myMusicInstance.play();

然后在渲染中:

tweenManager.update(delta);
Tween.to(music, MusicAccessor.VOLUME, 1f).cast(Music.class).target(1).start(tweenManager);

如果有任何不清楚的地方,请告诉我。