AndEngine - 停止所有声音和音乐运行时 - 更改引擎的AudioOptions

时间:2013-04-11 09:26:07

标签: android audio andengine

我正在尝试为游戏创建设置,允许用户保存是否需要声音(CheckBox)。

当用户取消选中它时,我想要禁用所有其他声音。

这就是我正在做的事情

// 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();

即使在做完

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

声音仍在播放 如何禁用所有声音?

或者,我必须这样做:

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

对于我应用中的每个声音?

2 个答案:

答案 0 :(得分:5)

您可以迭代所有MusicSound个对象,并在其上调用stop()pause()setVolume(0,0)


您也可以尝试通过将主音量设置为0来静音所有声音:

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

答案 1 :(得分:3)

如迈克尔所述,您可以暂停声音,而不是将音量设置为零。

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

这将停止所有声音。 无需迭代每个声音并暂停每个声音。 要恢复:

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