我希望在我的游戏的各个屏幕上播放背景音乐音乐最初在第一个屏幕类中启动:
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/