libgdx播放声音或音乐 - 最佳实践

时间:2014-03-21 04:36:23

标签: java android audio libgdx

就像inputListener应该是show()部分中的place / code,而不是render()部分,因为它会创建大量隐藏的侦听器。我的问题是: -

设置/播放声音/音乐的正确方法是什么?如果我将sound.play()放在渲染部分中,LibGdx将多次播放相同的声音(间隔非常短)。实现这个的最佳方法是什么?

评论已添加:此link ,尤其是斜体 中提供的答案突出显示此内容不应该是放在render()部分。我的问题是,在每个帧中放置代码而不播放相同声音的位置?

评论已添加:理论上,以下代码中的声音只能播放一次,对吧?但是,如果你仔细聆听,它会以很短的间隔播放多次。这是我的问题。希望这次我能很好地解释我的问题......

private int processStatus = 0;

private void show() {
    thisSound = programApp.assetManager.get("sound/thisSound.mp3", Sound.class);

    thisButton.addListener(new InputListener() {
        public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
            doLog("thisButton down");
            return true;
        }
        public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
            doLog("thisButton up");
            processStatus = 1;
        }
    });
}

private void render() {
    if (processStatus == 0){
        //do something
    } else if (processStatus == 1){
        thisSound.play();
        //do something else
        processStatus = 2;
    } else if (processStatus == 2){
        //do whatever 
    }
}

提前致谢

2 个答案:

答案 0 :(得分:1)

这个问题的答案非常棘手,因为没有最佳实践。 实施情况因情况而异。

这是我喜欢的。

音乐  在屏幕的构造中,播放音乐

  1. 如果您需要播放上一屏幕中的其他音乐,请关闭所有音乐

  2. music.setLoopable(真);

  3. 3,音乐。播放();

    声音。

    就声音而言,因为声音只在特定事件发生时播放一次。 例如,硬币被采取,加电,碰撞。 因此必须在特定条件下触发声音,以便我只播放一次。

答案 1 :(得分:1)

创建您自己的AudioManager。拥有这些东西的经理总是很高兴。代码分离,结构清晰。

我真的不明白这个问题?如果你拿起一枚硬币就应该发出声音吧?那么当我们碰撞它时,这个硬币应该被移除?那么如果硬币不再存在,那么下一帧就不会播放声音,因为我们无法与已被移除的东西发生碰撞?

示例:

    for(Coin coin : coins){
    if(player.collidesWith(coin)){
        playSound();
        coins.remove(coin, true);
    }
}

您始终将对象保留在集合中,以便仅渲染/更新集合中的对象。当发生上述碰撞时,对象将不再存在于集合中,从而使声音不可能