2013-03-09 116 views
0

我想我的遊戲過程中播放聲音。 但聲音,當我啓動應用程序只起半秒每次。播放聲音同時的onDraw

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Shapes shapes = new Shapes(this); 
    setContentView(shapes); 
    MediaPlayer mp = MediaPlayer.create(this, R.raw.back); 
    try { 
     mp.prepare(); 
    } catch (IllegalStateException e) {} 
     catch (IOException e) {} 
    mp.start(); 
    mp.setLooping(true); 
} 

mp.setLooping(真)沒有幫助,但只有當我刪除Works 「的setContentView(形狀);」。 我能做到這一點聲音不半秒後停止?

回答

0

如果聲音很短,加上循環

mp.setLooping(true); 

此外,您在標題中提到的onDraw()方法,但是你給人的戈夫是onCreate()

+0

我已經嘗試過這一點,但它不會改變任何東西。 – user2080326 2013-03-09 10:13:41

0

您可以使用setLooping(真) http://developer.android.com/reference/android/media/MediaPlayer.html#setLooping(boolean)

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Shapes shapes = new Shapes(this); 
     setContentView(shapes); 
     MediaPlayer mp = MediaPlayer.create(this, R.raw.back); 
     try { 
      mp.prepare(); 
     } catch (IllegalStateException e) {} 
      catch (IOException e) {} 
     mp.setLooping(true); 
     mp.start(); 
    } 
+0

當我設置循環爲真時,聲音在半秒鐘後也停止。 – user2080326 2013-03-09 10:22:48

+0

嘗試mp.start使用前selLooping(); – 2013-03-09 20:29:58

0

你的MediaPlayer對象(mp)中扮演一個時間當時mp.start();

如果你玩不斷再向其中加入setLooping(true)

MediaPlayer mp = MediaPlayer.create(this, R.raw.back); 
try { 
    mp.prepare(); 
    mp.setLooping(true); 
    mp.start(); 
} catch (IllegalStateException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

歡迎來到Stack Overflow!修復了你的答案,讓你的代碼看起來更好 – Magnilex 2013-03-09 10:45:55

+0

當我設置循環真正的聲音也有半秒後停止。 – user2080326 2013-03-09 11:06:51

+0

@MagnusTengdahl thnx ... – 2013-03-11 07:11:07

0

,如果這是一個遊戲,我假設它在一個線程中運行。 你的遊戲是否在一個線程中運行?

你的線程應該有一個doStart()或者已經聲明的MediaPlayer類似的方法。

在你的遊戲線程啓動的背景音樂的截斷基本的例子:

布爾BGMisOn; MediaPlayer BGM;

DOSTART(){ ... ... 如果 (BGMisOn)BGM.start() ... ... }