在屏幕上异步播放音乐--Libgdx Java

时间:2014-11-22 23:08:56

标签: java android libgdx

我希望在我的游戏的各个屏幕上播放背景音乐,音乐最初是在第一个屏幕类中启动的:

    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));

2 个答案:

答案 0 :(得分:0)

在方法中移动backgroundMusic.isPlaying()调用?

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

(...)

答案 1 :(得分:0)

看起来您在活动中调用了一些非UI代码。所以你需要将你的音乐播放器包装在AsyncTask中。这样你的播放器就不会阻止用户界面,也不会与它绑定。这应该像下面的代码。

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了解详情。