gpt4 book ai didi

java - 我应该如何只创建一次媒体播放器并多次调用它?

转载 作者:行者123 更新时间:2023-12-02 00:26:55 24 4
gpt4 key购买 nike

所以我正在开发一款小型手机游戏,当我点击按钮时,它应该播放声音效果。我希望它在短时间内播放多个实例,因此 SoundPool 在我的情况下不起作用。目前我正在使用这个方法

public void playTapSound(){
final MediaPlayer gameSound = MediaPlayer.create(this, R.raw.tapsound);
gameSound.start();
}

但是,我不会在任何地方调用 gameSound.release,因为我不确定在哪里调用它。因此,在使用 40 次后,声音可能会停止播放,因为创建的 MediaPlayer 过多。

我尝试放置

final MediaPlayer gameSound = MediaPlayer.create(this, R.raw.tapsound);

进入 onCreate(),但是当我这样做时,gameSound 会出现错误,提示“无法解析符号‘gameSound’”。

如果我将它放在 onCreate() 之前或之后,应用程序就会崩溃,因为“this”为 null。

当点击一个按钮时,还有一些其他的东西,然后我也会运行

    public void tapped(View view) {
if (!buttons[0].isAllCaps()) {
playTapSound();
buttons[0].setBackgroundColor(Color.parseColor("#1fab89"));
buttons[0].setAllCaps(true);
score++;
x++;
points.setText(String.valueOf(score));
}
else {
buttons[0].setBackgroundColor(Color.parseColor("#505bda"));
lose(score);
}
}

希望我能获得一些有关在何处放置 gameSound.release() 或如何在 onCreate() 创建玩家时调用 gameSound 的帮助。谢谢

最佳答案

使用怎么样Singleton pattern

public final class MediaPlayerHolder {
private static final MediaPlayerHolder INSTANCE = new MediaPlayerHolder();

public static MediaPlayerHolder getInstance() {
return INSTANCE;
}

private MediaPlayerHolder() {
}


private MediaPlayer gameSound;

// get with required parameters
public MediaPlayer get(...) {
if(mediaPlayer == null)
gameSound = MediaPlayer.create(...);
return gameSound;
}

}

public void playTapSound(){
MediaPlayerHolder.getInstance().get().start();
}

关于java - 我应该如何只创建一次媒体播放器并多次调用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58047047/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com