0

私はゲームを開発しています。設定アクティビティにトグル ボタンを配置して、ゲーム アクティビティの音楽をオンまたはオフにしました。

Settings.java ファイルは次のとおりです。

public class Settings extends Activity implements OnCheckedChangeListener{

ToggleButton tbMusic;
boolean music;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings);

    tbMusic = (ToggleButton)findViewById(R.id.tbMusic);

    tbMusic.setOnCheckedChangeListener(this);
}

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if(tbMusic.isChecked()) {
        music = true;
    } else {
        music = false;  
    }
    }
    }

そして Game.java ファイル (今のところこれしかありません):

    public class Game extends Activity {

MediaPlayer menuSong;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.game);

    menuSong = MediaPlayer.create(Menu.this, R.raw.menu);
    menuSong.setLooping(true);
    menuSong.start(); 
}


@Override
protected void onStop() {
    super.onStop();
    menuSong.stop();
    }
}

ToggleButton がチェックされたときにゲーム内の音楽がオフになるようにする方法について説明したり、例を挙げたりできますか?

ありがとうございました!

4

1 に答える 1

1

あなたの問題にはさまざまな解決策があります。私はあなたに2つの解決策を与えるつもりです:

1 - Application クラスを使用します。すべてのアプリは、次の方法で Application クラスを実装できます。

public class ClassName extends Application {
}

これは、アプリのどのアクティビティからでも、次のコマンドを使用してこのクラスにアクセスできるスーパー クラスです。

getApplication();

このアプリケーション クラスの作成方法については、インターネットで何かを読むことができます。問題の解決策は、次のようなアプリケーション クラスに変数を作成することです。

public class ClassName extends Application 
{
   private boolean isSoundEnabled;

   public boolean getSoundEnabled() { return isSoundEnabled; }
   public void setSoundEnabled(boolean isEnabled) { isSoundEnabled = isEnabled;}

@Override
    public void onCreate() {
        super.onCreate();
            isSoundEnabled = true;  
}

このようにして、クラスの設定で、この変数を次のように設定できます。

 @Override
 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if(tbMusic.isChecked()) {
       getApplication().setSoundEnabled ( true );
    } else {
       getApplication().setSoundEnabled ( false ); 
    }
}

クラス Game を開くたびに、この変数がどのように設定されているかを確認できます。

 getApplication().getSoundEnabled();

2-この情報をメモリに保存するため、2番目のソリューションの方が優れています。ユーザーがアプリ/ゲームを開くたびに、アプリはユーザーがこの変数にどのように設定したかを記憶できます。

これは、アプリを閉じて開いた後に、フラグ、設定内容を記憶し、この情報を回復する方法です。SharedPreferences オブジェクトを使用します。int、float、boolean などの値 (単純なデータ オブジェクト) を電話機のメモリに保存するために使用されます。

したがって、Settings クラスでは、ユーザーがサウンドを設定するたびに、値を保存できます。

SharedPreferences prefs = this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE);

if(tbMusic.isChecked()) {
       prefs.edit().putBoolean ("IS_ENABLED_VARIABLE", true ).commit();
    } else {
       prefs.edit().putBoolean ("IS_ENABLED_VARIABLE", false ).commit();
    }

Game クラスでは、次のコードを使用してこの値を回復できます。

SharedPreferences prefs = this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE);

boolean isEnabled = prefs.getBoolean("IS_ENABLED_VARIABLE", true);
//The second parameter (true) is the value by default if the variable with the name IS_ENABLED_VARIABLE is not find for the app.

IS_ENABLED_VARIABLE --> 変数の名前です。保存または復元するために同じものを使用する必要があります。任意の名前を使用できます。

com.example.app --> これは、電話のメモリ内の共有設定領域/ディレクトリに呼び出す名前です。好きな名前を使えます。

もしそうなら、私に投票してください!

于 2013-09-12T16:03:55.533 に答える