所以基本上,我在SurfaceView上创建一个游戏,我在我的主CustomView上有这些类:
private TitleScreen titleScreen;
private GameScreen gameScreen;
private PauseScreen pauseScreen;
private GameOverScreen gameOverScreen;
这些类中的每一个都有draw(Canvas canvas)
方法,并在用户转到另一个屏幕时调用。但问题是,我有一个SoundPlayer
类,其中包含使用SoundPool的所有声音效果。它将用于所有这些类。实际上有一种方法是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回答我的问题。 :)
答案 0 :(得分:1)
实际上有一种方法是SoundPlayer只加载一次,然后是 在这些课程中可用吗?
这是可能的。使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()