[英]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.