我已经创建了一个主活动启动的应用程序。在主Activity上,有2个复选框(cbPlayMusic和cbPlaySound)。当您通过单击开始按钮,使用此代码开始游戏:Android的布尔值不是做正确的事情 - 不断的MediaPlayer播放时它不应该被打
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";
然后当你点击开始,GobbleFishGame活动,这是该代码的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是真实的,背景音乐启动时GobbleFishGame活性是由于playMusic()创建播放:
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();
}
}
}
所以这是我的问题。用拨动的声音出现同样的问题:如果我切换声音关闭,它的工作原理并没有什么声音了(声音在我的鱼吃另一鱼或游戏结束的声音等),但是当我再次切换的声音,这是行不通的:播放时不播放声音。
我的猜测是,它有事情做与布尔值。我不知道我的代码有什么问题,但我做错了什么?
在此先感谢。
是内部分配'如果(isStopping =真)...'在方法'onOptionsMenuClosed'预期操作? – Howard
是的,这是因为如果您选择的选择主菜单,你回去MainActivity,然后音乐停止播放。如果我不使用isStopping,则比mGraphView.continueGame();将被调用,其中音乐将继续。 – Fluppe
我的意思是:你的意思是'=='而不是'='?否则if条件总是被满足,else路径是不需要的。 – Howard