1

所以我正在开发一款安卓游戏。我的主要活动或介绍活动有游戏的背景音乐。总体而言,它是整个游戏的主要背景音乐。所以我让音乐继续播放:

 private void startBgSound() {
    // TODO Auto-generated method stub
    //int soundFile = R.raw.backgroundmusic;
    //AssetFileDescriptor afd = getResources().openRawResourceFd(soundFile);

    bgsound = new MediaPlayer();
    bgsound.reset();
    bgsound = MediaPlayer.create(this, R.raw.backgroundmusic);

    bgsound.setLooping(true);
    bgsound.setVolume(100, 100);
    bgsound.start();
 } 

通过将循环设置为真。当用户应该点击播放按钮(仍然在主活动上)时,下一个活动位于主活动之上。但是在我的第二个活动中,我放了一个暂停按钮,所以当用户点击它时,背景音乐也应该暂停。

你对如何做到这一点有任何聪明的想法吗?我被这个问题困住了。因此,如果您能提供帮助,我将不胜感激。谢谢。

4

1 回答 1

2

在我的游戏中,我使用静态类处理音乐。只需在开始播放音乐时为其提供上下文,您就可以在代码中的任何位置停止音乐。

只需确保在用户离开或打开游戏时重置类,因为即使游戏已关闭,静态类也可能继续存在。

这是一个例子:

import android.content.Context;
import android.media.MediaPlayer;

public class SoundHandler {
    private static MediaPlayer backgroundMusic;
    private static Context context;

    private static boolean isMuted = false;

    public static void setContext(Context cont){
        context = cont;
    }

    public static void playMusic(int resource){
        if(backgroundMusic != null) backgroundMusic.reset();

        try{
            backgroundMusic = MediaPlayer.create(context, resource);

            backgroundMusic.setLooping(true);
            backgroundMusic.setVolume(100, 100);

            if(!isMuted){
                backgroundMusic.start();
            }
        } catch (NullPointerException e){
            //Creating MediaPlayer failed. This happens randomly without any clear reasons.
            e.printStackTrace();
        }
    }

    public static void setMuted(boolean muted){
        if(backgroundMusic != null){
            if(muted){
                if(backgroundMusic.isPlaying()){
                    backgroundMusic.stop();
                    isMuted = true;
                }
            } else {
                if(!backgroundMusic.isPlaying()){
                    backgroundMusic.start();
                    isMuted = false;
                }
            }
        }
    }

    public static void quit(){
        if(backgroundMusic != null){
            backgroundMusic.release();
        }
    }
}

请记住在 onCreate() 中设置上下文并在 onDestroy() 中运行 quit() 函数。

于 2013-06-22T15:50:32.073 回答