当前位置:操作系统 > 安卓/Android >>

【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPool的利弊以及各个在

 

游戏开发中,通过资料和书籍了解到在有两种播放音频形式可以用在我们的游戏开发中,第一个:MediaPlayer 类 ;第二个:SoundPool 类!

PS:当然还有一个JetPlayer 但是 播放的文件格式比较麻烦,所以这里抛开不解释,有兴趣的可以去自己研究下、呵呵;

 

运行效果图:

\                        

 

 

 MediaPlayer 和:SoundPool 类!那么他们之间的利弊各是什么呢?或者说,我们游戏开发到底用哪一个更佳呢?

答案就是:两者都必须要!!!分析利弊与各自的用途后,等各位童鞋熟习每个播放形式实现之后我会详细道来!

 

 下面仍然是先上代码:(先看代码 然后我讲解两个播放形式的利弊关系和各个用途以及其中解释代码中的几个备注!)

 

 

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150

package com.himi; 

import java.util.HashMap; 

import android.content.Context; 

import android.graphics.Canvas; 

import android.graphics.Color; 

import android.graphics.Paint; 

import android.media.AudioManager; 

import android.media.MediaPlayer; 

import android.media.SoundPool; 

import android.view.KeyEvent; 

import android.view.MotionEvent; 

import android.view.SurfaceHolder; 

import android.view.SurfaceView; 

import android.view.SurfaceHolder.Callback; 

public class MySurfaceView extends SurfaceView implements Callback, Runnable { 

    private Thread th; 

    private SurfaceHolder sfh; 

    private Canvas canvas; 

    private MediaPlayer player; 

    private Paint paint; 

    private boolean ON = true; 

    private int currentVol, maxVol; 

    private AudioManager am;  

    private HashMap<Integer, Integer> soundPoolMap;//备注1 

    private int loadId; 

    private SoundPool soundPool; 

    public MySurfaceView(Context context) { 

        super(context); 

// 获取音频服务然后强转成一个音频管理器,后面方便用来控制音量大小用 

        am = (AudioManager) MainActivity.instance 

                .getSystemService(Context.AUDIO_SERVICE); 

        maxVol = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); 

        // 获取最大音量值(15最大! .不是100!) 

        sfh = this.getHolder(); 

        sfh.addCallback(this); 

        th = new Thread(this); 

        this.setKeepScreenOn(true); 

        setFocusable(true); 

        paint = new Paint(); 

        paint.setAntiAlias(true); 

        //MediaPlayer的初始化 

        player = MediaPlayer.create(context, R.raw.himi);  

        player.setLooping(true);//设置循环播放 

        //SoundPool的初始化 

        soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100); 

        soundPoolMap = new HashMap<Integer, Integer>(); 

        soundPoolMap.put(1, soundPool.load(MainActivity.content, 

                R.raw.himi_ogg, 1)); 

        loadId = soundPool.load(context, R.raw.himi_ogg, 1); 

//load()方法的最后一个参数他标识优先考虑的声音。目前没有任何效果。使用了也只是对未来的兼容性价值。 

    } 

    public void surfaceCreated(SurfaceHolder holder) { 

        /*

         * Android OS中,如果你去按手机上的调节音量的按钮,会分两种情况,

         * 一种是调整手机本身的铃声音量,一种是调整游戏,软件,音乐播放的音量

         * 当我们在游戏中的时候 ,总是想调整游戏的音量而不是手机的铃声音量,

         * 可是烦人的问题又来了,我在开发中发现,只有游戏中有声音在播放的时候

         * ,你才能去调整游戏的音量,否则就是手机的音量,有没有办法让手机只要是

         * 在运行游戏的状态就只调整游戏的音量呢?试试下面这段代码吧!

         */ 

        MainActivity.instance.setVolumeControlStream(AudioManager.STREAM_MUSIC); 

        // 设定调整音量为媒体音量,当暂停播放的时候调整音量就不会再默认调整铃声音量了,娃哈哈 

         

        player.start(); 

        th.start(); 

    } 

    public void draw() { 

        canvas = sfh.lockCanvas(); 

        canvas.drawColor(Color.WHITE); 

        paint.setColor(Color.RED); 

        canvas.drawText("当前音量: " + currentVol, 100, 40, paint); 

     &n

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,