我有一個行軍的聲音文件,我一旦發生特定事件時播放,但問題歸結爲讓文件在指定的時間內淡出,然後在音量達到0時停止。此項目用於桌面。Libgdx如何讓SFX淡出?
Sound marching = Gdx.audio.newSound(Gdx.files.internal("sounds/test.wav"));
我在這第一次嘗試通過定時調度任務:
final long mId = marching.play(1f, 1f, 0);
for (float i = 1; i > 0; i -= 0.01) {
Timer.schedule(new Task() {
@Override
public void run() {
marching.setVolume(mId, i);
}
}, 0.3f);
}
marching.stop();
然而這似乎是踏着#setVolume
,我決定採取之前調用行軍#停止另一個應用:
float volume = 1;
final long mId = marching.play(volume, 1f, 0), startTime = TimeUtils .millis();
while (volume > 0) {
if (TimeUtils.millis() - startTime % 300 == 0) marching.setVolume(mId, volume -= 0.1);
}
marching.stop();
我認爲這會減少體積梅根據分配的時間量,但它只是使程序凍結。
是否有一種簡單的方式來衰減SFX音頻或設置頻繁睡眠的方式,以便可以反覆降低音量?
謝謝。
我試着實現你的解決方案,但似乎它在調用run()內部的內容之前等待整個延遲。這導致它在播放聲音之前持續了0.3秒,然後突然結束。 –
「,它在調用run()的內部之前等待整個延遲」這是正確的。嘗試將步驟因子更改爲0.001。 –
如果延遲爲0.001,那麼這不會破壞run()方法的整個目的嗎? –