メインのアクティビティで始まるアプリを作成しました。そのメインアクティビティには、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";
次に、[スタート]、[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が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;
}
ただし、[音楽の切り替え]と[サウンドの切り替え]のオプションは機能しません。これが起こります。チェックボックスの音楽がtrueの場合(つまり音楽が再生されている場合)、音楽を切り替えると正常に機能します。ただし、音楽をオンに戻したい場合は、それも機能しますが、一時停止は機能しなくなります。一時停止中にmPlayer.pauseを呼び出します。音楽のオンとオフを切り替えていない場合は、これで問題なく動作します。音楽のオンとオフを切り替えた場合、何らかの理由で一時停止が機能しなくなります。
これは一時停止コードです:
public void pauseGame() {
if (mMode != MODE_PAUSE) {
mMode = MODE_PAUSE;
if (!mPlayMusic) {
return;
}
if (mPlayer != null) {
mPlayer.pause();
}
}
}
それが私の問題です。トグルサウンドでも同じ問題が発生します。サウンドをオフに切り替えると機能し、音が出なくなります(魚が別の魚を食べたときやゲームオーバーの音のように聞こえます)が、サウンドを再度オンにすると機能しません:再生すべきときに音が出ない。
私の推測では、それはブール値と関係があると思います。コードの何が問題なのかわかりませんが、何が問題なのですか?
前もって感謝します。