作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我正在开发一款小型手机游戏,当我点击按钮时,它应该播放声音效果。我希望它在短时间内播放多个实例,因此 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/
我是一名优秀的程序员,十分优秀!