gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 21:11:47 25 4
gpt4 key购买 nike

像 inputListener 应该放置/编码在 show() 部分,而不是在 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
}
}

提前致谢

最佳答案

创建您自己的音频管理器。有经理负责这些事情总是好的。代码分离并且结构清晰。

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

例子:

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

您总是将您的对象保存在一个集合中,因此您只渲染/更新集合中的对象。当发生上述碰撞时,该对象将不再存在于集合中,从而不可能播放声音。

关于java - libgdx 播放声音或音乐 - 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22550259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com