簡體   English   中英

libgdx播放聲音或音樂-最佳做法

[英]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 
    }
}

提前致謝

這個問題的答案非常棘手,因為沒有最佳實踐之類的東西。 實施因情況而異。

這是我更喜歡做的。

對於要在其中播放音樂的屏幕構造函數中的音樂

  1. 如果您需要播放與上一屏幕不同的音樂,請關閉所有正在播放的音樂

  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM