在使用libGDX开发的2D游戏中,最有效的方式是使玩家产生足迹,例如-
if(player.isWalking) {
Timer.schedule(new Task(){
public void run(){
play(single_footstep);
}
}, 0.5f);
}
该代码根本无效。.实际上,它不起作用,声音以不好的方式传播,无论您使用延迟值播放多少,它仍然无效。
顺便说一句-我正在使用libgdx的Timer类,它与util类非常相似。
因此,也许您有一个更好的想法来实施?我是libGDX的新手,所以也许我错过了一些东西。
提前致谢 :)
最佳答案
该代码只是在您的绘制循环中吗?如果是这样,它将安排声音在每一帧播放,因此您将开始每秒播放30或60个声音(每个声音都比您调用时有所延迟,但仍会同时播放)。您需要确保一旦安排好任务,在准备好再次播放声音之前不要再次执行它。
我会在没有安排的情况下这样做。像这样:
if (player.isWalking){
mTimeToNextStep -= deltaTime;
if (mTimeToNextStep < 0){
play(single_footstep);
while (mTimeToNextStep < 0){ //in case of a really slow frame,
//make sure we don't fall too far behind
mTimeToNextStep += TIME_BETWEEN_STEP_SOUNDS;
}
}
} else {
mTimeToNextStep = 0; //or whatever delay you want for the first sound when
//you start walking
}