在使用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
}

07-27 23:29