[英]libgdx play sound or music - best practice
像inputListener一樣,它應該在show()部分中放置/編碼,而不是在render()部分中,因為它將創建很多隱藏的偵聽器。 我的問題是:
設置/播放聲音/音樂的正確方法是什么? 如果我將sound.play()放置在渲染部分中,LibGdx將多次播放同一聲音(間隔非常短)。 實施此的最佳方法是什么?
已添加評論 :在此鏈接中提供的答案, 尤其是斜體部分 ,突出表明不應將此內容放在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
}
}
提前致謝
這個問題的答案非常棘手,因為沒有最佳實踐之類的東西。 實施因情況而異。
這是我更喜歡做的。
對於要在其中播放音樂的屏幕構造函數中的音樂
如果您需要播放與上一屏幕不同的音樂,請關閉所有正在播放的音樂
music.setLoopable(真);
3,音樂。 玩();
發出聲音。
就聲音而言,特定事件發生時聲音只能播放一次。 例如取硬幣,加電,碰撞。 因此必須在特定條件下觸發聲音,這樣我才能播放一次。
創建自己的AudioManager。 有經理來處理這些事情總是很高興。 代碼被分離並且在結構上是干凈的。
我真的不明白這個問題嗎? 如果您撿起硬幣,應該發出聲音,對不對? 那么,當我們與之碰撞時,可能應該將其刪除嗎? 然后,如果硬幣不再存在,因為我們無法與已移除的物體碰撞,下一幀將沒有聲音播放?
例:
for(Coin coin : coins){
if(player.collidesWith(coin)){
playSound();
coins.remove(coin, true);
}
}
您始終將對象保留在集合中,因此僅渲染/更新集合中的對象。 當發生上述碰撞時,該對象將不再存在於集合中,因此無法播放聲音。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.