我正在用libgdx構建一個滾動式射擊遊戲。在Windows中,一切都運行得很好,但在Android上我得到明顯的抖動,並且幀速率從61 fps avg沒有聲音下降到48-56 fps avg與聲音。它同時播放很多小型聲音效果,因爲有很多子彈要射擊並且敵人立即擊中。我的聲音例行:android gdx聲音性能問題
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.audio.Sound;
public class SoundFX {
static final int BGDIE = 1, BGHIT = 2, BGLASER = 3, BGSPAWN = 4, PDIE = 5, PHIT = 6, PLASER = 7, PSPAWN = 8, PAUSE = 9;
Sound S_BGDIE, S_BGHIT, S_BGLASER, S_BGSPAWN, S_PDIE, S_PHIT, S_PLASER, S_PSPAWN, S_PAUSE;
public void load()
{
S_BGDIE = Gdx.audio.newSound(Gdx.files.internal("data/sfx/badguydie.mp3"));
S_BGHIT = Gdx.audio.newSound(Gdx.files.internal("data/sfx/badguygothit.mp3"));
S_BGLASER = Gdx.audio.newSound(Gdx.files.internal("data/sfx/badguylaser.mp3"));
S_BGSPAWN = Gdx.audio.newSound(Gdx.files.internal("data/sfx/badguyspawn.mp3"));
S_PDIE = Gdx.audio.newSound(Gdx.files.internal("data/sfx/playerdie.mp3"));
S_PHIT = Gdx.audio.newSound(Gdx.files.internal("data/sfx/playergothit.mp3"));
S_PLASER = Gdx.audio.newSound(Gdx.files.internal("data/sfx/playerlaser.mp3"));
S_PSPAWN = Gdx.audio.newSound(Gdx.files.internal("data/sfx/playerspawn.mp3"));
S_PAUSE = Gdx.audio.newSound(Gdx.files.internal("data/sfx/pause.mp3"));
}
public void unload()
{
S_BGDIE.dispose();
S_BGHIT.dispose();
S_BGLASER.dispose();
S_BGSPAWN.dispose();
S_PDIE.dispose();
S_PHIT.dispose();
S_PLASER.dispose();
S_PSPAWN.dispose();
S_PAUSE.dispose();
}
public void play(int id)
{
switch(id)
{
case BGDIE:
S_BGDIE.play();
break;
case BGHIT:
S_BGHIT.play();
break;
case BGLASER:
S_BGLASER.play();
break;
case BGSPAWN:
S_BGSPAWN.play();
break;
case PDIE:
S_PDIE.play();
break;
case PHIT:
S_PHIT.play();
break;
case PLASER:
S_PLASER.play();
break;
case PSPAWN:
S_PSPAWN.play();
break;
case PAUSE:
S_PAUSE.play();
break;
default:
System.out.println("invalid sfx call");
break;
}
}
}
戲被調用大約4-10次,第二取決於發生了什麼事在遊戲中,聲音效果是持續少於並在每個avarage 8KB第二。
這是怎麼回事,我該如何解決這個問題?它使遊戲看起來非常不專業,而且在難度上幾乎無法播放。
謝謝!非常廣泛的答案。現在我知道在哪裏看,以及如何解決它。我首先要看看是否在併發聲音上設置上限可以解決問題。如果是這樣,我會增加聲音優先級。如果沒有,我將使用一個具有較低優先級的獨立聲音線程。 – Hatagashira
很高興幫助:) – Jyro117