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

标签 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;
                }
   (...)
 }

问题

问题是,当我进入游戏的前一个屏幕后返回该类(class)时,它会重新播放音乐,但我不希望这样,我希望它是一个连续的循环。

屏幕如何更改为此类/屏幕的示例:

game.setScreen(new playOptions(game));

最佳答案

看起来您在 Activity 中调用了一些非 UI 代码。所以你需要把你的音乐播放器包装在一个 AsyncTask 中。这样您的播放器就不会阻塞 UI 也不会被绑定(bind)到它。这应该像下面的代码。

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获取更多信息。

关于java - 在屏幕上异步播放音乐 - Libgdx Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27083575/

相关文章:

java - Eclipse 指向依赖项中的错误路径

android - 有没有办法显示 Android 的数字键盘但仅显示选定的数字?

cocos2d-iphone - Unity vs Libgdx vs Cocos2d-x

java - 使用 Click Listener : no response? 检测对 actor 的点击

libgdx - libGDX无法执行操作

java - 从文件路径创建位图/可绘制对象

java - 应使用 PowerManager 唤醒设备多长时间以确保显示使用 BroadcastReceiver 创建的 Activity ?

android - 使 tabwidget 的 child 大于 tabwidget

java - 错误: Could not find or load main class at one call and no error at another call in the same script

java - 让父类(super class)使用子类使用的枚举