簡體   English   中英

在屏幕上異步播放音樂-Libgdx Java

[英]Play music asynchronously over screens - Libgdx Java

我希望背景音樂可以在游戲的各個屏幕上播放,而音樂最初是在第一屏幕類中開始播放的:

    boolean backgroundMusicPlaying = backgroundMusic.isPlaying();

    public MainMenuScreen(Game1 gam){
    (...)
    if(backgroundMusicPlaying != true){
                backgroundMusic.play();
                backgroundMusic.setVolume(0.3f);
                backgroundMusic.setLooping(true);
                backgroundMusicPlaying = true;
                }
   (...)
 }

問題

問題是當我去過游戲中的上一個屏幕后回到班級時,它會重新開始音樂,但是我不希望這樣,我希望它成為連續循環。

屏幕如何在此類/屏幕之間切換的示例:

game.setScreen(new playOptions(game));

backgroundMusic.isPlaying()調用移到方法內部?

public MainMenuScreen(Game1 gam){
(...)
boolean backgroundMusicPlaying = backgroundMusic.isPlaying();
if(backgroundMusicPlaying != true){
            backgroundMusic.play();
            backgroundMusic.setVolume(0.3f);
            backgroundMusic.setLooping(true);
            backgroundMusicPlaying = true;
            }

(......)

看起來您在活動中正在調用一些非UI代碼。 因此,您需要將音樂播放器包裝在AsyncTask中。 這樣,您的播放器將不會阻止UI,也不會與其綁定。 這應該類似於以下代碼。

public class MusicPlayer extends AsyncTask<Void, Void, Void>
{
    public String filename;
    public boolean backgroundMusicPlaying;
    public ??? backgroundMusic;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        //this method will be running on UI thread
    }
    @Override
    protected Void doInBackground(Void... params) {
        //this method will be running on background thread so don't update UI frome here
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);

        //this method will be running on UI thread
    }


    public void playMusic() {
        // stub
    }

    public void pauseMusic() {
        // stub
    }

    public void setVolume(float level) {
        // stub
    }

    // etc
}

只需實現一些方法即可控制MusicPlayer,或僅包裝backgroundMusic的方法。 或者只是讓backgroundMusic的類擴展AsyncTask類。

閱讀http://developer.android.com/reference/android/os/AsyncTask.html了解更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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