我希望在我的游戏的各个屏幕上播放背景音乐,音乐最初是在第一个屏幕类中启动的:
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));
答案 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了解详情。