我创建了一个以主Activity开头的应用。在该主Activity上,有2个复选框(cbPlayMusic和cbPlaySound)。当您通过单击开始按钮开始游戏时,使用以下代码:
btStart.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(GobbleFishMainActivity.this, GobbleFishGame.class);
intent.putExtra(INTENT_EXTRA_PLAY_MUSIC, cbMusic.isChecked());
intent.putExtra(INTENT_EXTRA_PLAY_SOUND, cbSound.isChecked());
startActivity(intent);
}
});
活动之上是:
public static final String INTENT_EXTRA_PLAY_MUSIC = "be.fielibert.gobblefish.extra.PLAY_MUSIC";
public static final String INTENT_EXTRA_PLAY_SOUND = "be.fielibert.gobblefish.extra.PLAY_SOUND";
然后当你点击Start,GobbleFishGame Activity时,这是onCreate代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initBitmaps();
mGraphView = new GraphView(this);
mPlayMusic = getIntent().getBooleanExtra(GobbleFishMainActivity.INTENT_EXTRA_PLAY_MUSIC,true);
mPlaySound = getIntent().getBooleanExtra(GobbleFishMainActivity.INTENT_EXTRA_PLAY_SOUND,true);
setContentView(mGraphView);
mGraphView.runProgram();
playMusic();
}
当mPlayMusic为true时,由于playMusic()创建了GobbleFishGame活动,背景音乐开始播放:
private void playMusic(){
if (!mPlayMusic) {
return;
}
mPlayer = MediaPlayer.create(GobbleFishGame.this, R.raw.song);
mPlayer.setLooping(true);
mPlayer.start();
}
到目前为止一切正常。但是,当您按Android设备上的菜单按钮时,会创建一个菜单,其中包含4个选项:主菜单,重启游戏,切换音乐,切换声音。 这是菜单的代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(Menu.NONE, MENU_MENU, Menu.NONE, "Main menu");
menu.add(Menu.NONE, MENU_RESTART, Menu.NONE, "Restart game");
menu.add(Menu.NONE, MENU_MUSIC, Menu.NONE, "Toggle music");
menu.add(Menu.NONE, MENU_SOUND, Menu.NONE, "Toggle sound");
return true;
}
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
mGraphView.pauseGame();
return super.onMenuOpened(featureId, menu);
}
@Override
public void onOptionsMenuClosed(Menu menu) {
super.onOptionsMenuClosed(menu);
if(isStopping=true){
return;
}
else{
mGraphView.continueGame();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == MENU_MENU) {
//mPlayer.release();
isStopping=true;
stopMusic();
mGraphView.mState = STATE_STOP;
Intent intent = new Intent(GobbleFishGame.this, GobbleFishMainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
//finish();
}
else if (item.getItemId() == MENU_RESTART) {
mGraphView.init();
mPlayer.reset();
playMusic();
}
else if (item.getItemId() == MENU_MUSIC) {
if (!mPlayMusic) {
mPlayMusic=true;
if (mPlayer != null) {
//mPlayer.start();
playMusic();
}
//playMusic();
}
if(mPlayMusic){
mPlayMusic=false;
stopMusic();
}
}
else if (item.getItemId() == MENU_SOUND) {
if (!mPlaySound) {
mPlaySound=true;
if (mp != null) {
mp.reset();
}
//mp.reset();
}
if(mPlaySound){
mPlaySound=false;
}
}
return true;
}
但是,切换音乐和切换声音的选项将无效。这就是:当复选框音乐为真时(所以音乐正在播放),如果你然后切换音乐它工作正常。但是,如果你想重新打开音乐,它也可以工作,但暂停不再有效。在暂停时我调用mPlayer.pause,如果我没有打开或关闭音乐,这可以正常工作。如果我打开或关闭音乐,暂停因某些原因不再起作用。
这是暂停代码:
public void pauseGame() {
if (mMode != MODE_PAUSE) {
mMode = MODE_PAUSE;
if (!mPlayMusic) {
return;
}
if (mPlayer != null) {
mPlayer.pause();
}
}
}
这就是我的问题。切换声音也会出现同样的问题:如果我关闭声音,它就会起作用而且没有声音了(听起来像我的鱼吃另一条鱼或游戏声音时),但当我再次切换声音时,它不起作用:应该播放时没有播放声音。
我的猜测是它与布尔有关。我不知道我的代码有什么问题,我做错了什么?
提前致谢。
答案 0 :(得分:1)
在MENU_MUSIC
和MENU_SOUND
处理中,您有以下代码行:
if (!mPlayMusic) {
mPlayMusic=true;
... playMusic(); ...
}
if(mPlayMusic) {
mPlayMusic=false;
... stopMusic(); ...
}
由于您在第一个else
条件为真时省略了if
,因此第二个被触发(由于第一个内部的分配mPlayMusic=true;
),因此音乐会立即停止开始。