2013-04-11 52 views
0

我正在嘗試創建允許用戶保存是否需要聲音或不(CheckBox)的遊戲設置。AndEngine - 停止所有聲音和音樂運行時 - 更改引擎的AudioOptions

當用戶取消選中它時,我想禁用所有更多的聲音。

這就是我甚至做

mActivity.getEngine().getEngineOptions().getAudioOptions().setNeedsSound(false); 
mActivity.getEngine().getEngineOptions().getAudioOptions().setNeedsMusic(false); 

聲音仍然起着後做

// Create Dialog 
final SexyAlertDialog dialog = new SexyAlertDialog(mActivity,R.layout.settings,R.style.SettingDialog,false); 

// Find CheckBox 
final CheckBox isSoundEnabled = (CheckBox) dialog.findViewById(R.id.isSoundEnabled); 

// Check SharedPreferences to get isSoundEnabled value 
if(mSettingPreferences.getBoolean("isSoundEnabled", false)){ 
    isSoundEnabled.setChecked(true); 
}else{ 
    isSoundEnabled.setChecked(false); 
} 

// OnCheckedChangeListener on Checkbox in AlertDialog 
isSoundEnabled.setOnCheckedChangeListener(new OnCheckedChangeListener(){ 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     if(isChecked){ 
      mSettingEditor.putBoolean("isSoundEnabled", true); 
      mSettingEditor.commit(); 

      // Enable Music and Sound 
      mActivity.getEngine().getEngineOptions().getAudioOptions().setNeedsSound(true); 
      mActivity.getEngine().getEngineOptions().getAudioOptions().setNeedsMusic(true); 

      Toast.makeText(mActivity, "Audio Enabled", Toast.LENGTH_LONG).show(); 
     }else{ 
      mSettingEditor.putBoolean("isSoundEnabled", false); 
      mSettingEditor.commit(); 

      // Disable Music and Sound 
      mActivity.getEngine().getEngineOptions().getAudioOptions().setNeedsSound(false); 
      mActivity.getEngine().getEngineOptions().getAudioOptions().setNeedsMusic(false); 

      Toast.makeText(mActivity, "Audio Disabled !! ", Toast.LENGTH_LONG).show(); 
     } 
    } 
}); 

    dialog.show(); 


我怎樣才能禁用每一個聲音?

或者,我也要做這樣的:

if(mSettingPreferences.getBoolean("isSoundEnabled", false)){ 
    pMySound.play(); 
} 

對於我的應用程序每一個聲音?

回答

5

你可以遍歷所有MusicSound對象,並調用stop()pause()setVolume(0,0)他們。


您也可以嘗試主音量設置爲0靜音所有聲音:

mActivity.getEngine().getMusicManager().setMasterVolume(0); 
mActivity.getEngine().getSoundManager().setMasterVolume(0); 
+0

工作! :D 使聲音和音樂再次我應該設置setMasterVolume(1); 對不對? – 2013-04-11 09:50:14

+0

我猜想最大值是1.0,因爲它是一個浮點數,但我不完全確定。 – Michael 2013-04-11 09:52:49

+2

請注意,如果您想降低功耗,您最好暫停/停止所有音樂/聲音,而不是將音量設置爲0. – Michael 2013-04-11 09:54:14

3

如前所述邁克爾,你可以暫停,而不是體積設定爲零的聲音。

mActivity.getEngine().getSoundManager().onPause(); 

這將停止所有聲音。 無需遍歷每個聲音並暫停每個聲音。 要恢復:

mActivity.getEngine().getSoundManager().onResume(); 
+0

您在[SoundManager類?](https:/ /github.com/nicolasgramlich/AndEngine/blob/GLES2/src/org/andengine/audio/sound/SoundManager.java) – 2014-02-06 13:42:07

+2

已於10個月前加入https://github.com/nicolasgramlich/AndEngine/blob/GLES2- AnchorCenter/SRC /組織/ andengine /音頻/聲音/ SoundManager.java。更新你的引擎。 – 2014-02-07 01:28:13

+0

你的鏈接把我帶到了GLES2。最新的引擎是GLES2-AnchorCenter。 https://github.com/nicolasgramlich/AndEngine/blob/GLES2-AnchorCenter/src/org/andengine/audio/sound/SoundManager.java更改分支並下載。這些功能並不在AnchorCenter中,而是在10個月前添加的。 – 2014-02-07 01:34:47