1

つまり、基本的に、SurfaceViewでゲームを作成していて、メインのCustomViewに次のクラスがあります。

プライベートTitleScreentitleScreen; 
プライベートGameScreengameScreen;
プライベートPauseScreenpauseScreen;
プライベートGameOverScreengameOverScreen;

これらの各クラスにはdraw(Canvas canvas)メソッドがあり、ユーザーが別の画面に移動したときに呼び出されます。ただし、SoundPlayerSoundPoolを使用したすべての効果音を含むクラスがあります。これらすべてのクラスで使用されます。SoundPlayerが一度だけロードされ、その後これらのクラス全体で利用できるようにする方法は実際にありますか?またはrelease()、切り替えるたびにコンストラクターを呼び出して呼び出す必要がありますか?前もって感謝します。:D

更新(解決済み):

これが私がしたことです。SoundPlayerクラスのインスタンスを作成しました。

public class SoundPlayerInstance { 
private static SoundPlayer soundPlayerInstance;
private SoundPlayerInstance(){}

public static void createInstance(Context context){
soundPlayerInstance = new SoundPlayer(context);
}

public static SoundPlayer getInstance(){
return soundPlayerInstance;
}
}

私のメインビューでは、何かをする前に、コンストラクターでこれを呼び出します。

SoundPlayerInstance.createInstance();

次に、どのクラスでも、それを呼び出してサウンドを再生できます。

SoundPlayerInstance.getInstance().playSound();

これは、このような状況だけでなく、他のすべてのクラスで使用できるクラスをインスタンス化する開発者(私のような)にも役立つと思います。私の質問に答えてくれたsystem32に感謝します。:)

4

1 に答える 1

1

実際、SoundPlayer を 1 回だけロードしてから、これらのクラス全体で使用できる方法はありますか?

それが可能だ。SoundPlayerクラスをシングルトンにします。

public class SoundPlayer
{

  private static SoundPlayer instance;

  private SoundPlayer()
  {
     // Do some stuff
  }

  public static SoundPlayer getInstance()
  {
     if(instance == null)
         instance = new SoundPlayer();

     return instance;
  }

}

グローバルにアクセスするには、電話するだけですSoundPlayer.getInstance()

于 2013-02-13T00:54:20.290 に答える