【问题标题】:Libgdx Sound when it has finishedLibgdx 完成后的声音
【发布时间】:2016-06-16 15:56:18
【问题描述】:

当前代码在直立状态下会重复运行低音,直到它开始扭曲声音并且运行不佳。当它完成运行并停止它运行多次时,我将如何处理声音,因为我希望声音在进入这种直立状态时只播放一次。谢谢亚历克斯。

public void determineState(){
        accelX = Gdx.input.getAccelerometerX();
        accelY = Gdx.input.getAccelerometerY();
        accelZ = Gdx.input.getAccelerometerZ();

        state = "NULL";

        if(accelX < 1 && accelX > -1){
            if(accelY > -1 && accelY < 1){
                if(accelZ > 9 && accelZ < 11){
                    state = "UPRIGHT";
                }
            }
        }

    }

 public void playSound(String soundString){
        System.out.println(soundString);
        if(soundString != "null"){
            sound = Gdx.audio.newSound(Gdx.files.internal(soundString + ".wav"));
            long id = sound.play();
            sound.setVolume(id, 3);
        }else if (soundString == "null"){
        }
    }

【问题讨论】:

  • 为什么你的状态是字符串而不是枚举或整数?看起来很容易出错。
  • 是的,我尝试实现枚举,但我有点挣扎,所以只使用字符串,因为我可以很容易地控制所有名称。 @Tenfour04

标签: libgdx


【解决方案1】:

您不应该在每次播放时都创建新声音并处理它。这是浪费时间一遍又一遍地重新加载它。将加载的声音存储在一个数组中,或者使用 AssetManager 加载它们并从那里获取引用。

您的playSound 方法如下所示:

public void playSound (String soundFileName){
    sound = assetManager.get(soundFileName, Sound.class);
    sound.play();
}

顺便说一句,将音量设置为 3 是没有意义的,因为它是 0-1 的比例。

如果您希望在状态更改时只发生一次某事,则在状态更改时调用该方法,而不是像您正在做的那样在每一帧上调用。

即这样做:

//...
if(accelZ > 9 && accelZ < 11){
    state = "UPRIGHT";
    playSound("uprightStateChange.wav");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 2018-07-19
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多