如何在LibGDX中使用UniversalTweenEngine
类正确使用Music
?
我在LibGDX中使用UniversalTweenEngine
和Music
类时遇到了问题。我有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
,并发现它们未被调用。那我该怎么做呢?
答案 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);
如果有任何不清楚的地方,请告诉我。