我想为每个玩家事件(如死亡事件)添加声音效果。我应该使用音池还是meidaplayer,我将如何处理?为了更好地理解以下内容,是我的类(class)设计,我有一个主 Activity 类“游戏”,从该 View 中我称之为“GamePanel”类,该类扩展了surfaceView并绘制了我的整个游戏。任何帮助将不胜感激!下面的游戏类别。

import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.SoundPool;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

public class Game extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    View v1 = (new GamePanel(this));
    setContentView(v1);


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_game, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);


}

}

和我想播放声音的GamePanel
   player.resetDY();
        if (!reset) {
            newGameCreated = false;
            startReset = System.nanoTime();
            reset = true;
            dissapear = true;
            explosion = new
            Explosion(BitmapFactory.decodeResource(getResources(), R.drawable.explosion), player.getX(),
                    player.getY() - 30, 100, 100, 25);
             ///here

最佳答案

对于爆炸,硬币收集等短暂的声音效果,最好使用SoundPool。

您只需要创建一个声音池:

SoundPool sp = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);

在棒棒糖及更高版本中:
AudioAttributes attrs = new AudioAttributes.Builder()
        .setUsage(AudioAttributes.USAGE_GAME)
        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
        .build();
SoundPool sp = new SoundPool.Builder()
        .setMaxStreams(10)
        .setAudioAttributes(attrs)
        .build();

这将创建最大的声音池。最多10个声音流(即一次可以播放多少个同时的声音效果),并使用AudioManager.STREAM_MUSIC作为声音流。

确保在“ Activity ”中也设置了音量控制,以便用户能够更改适当流的音量:
setVolumeControlStream(AudioManager.STREAM_MUSIC);

然后,您需要将音效加载到池中并为其指定标识符:
int soundIds[] = new int[10];
soundIds[0] = sp.load(context, R.raw.your_sound, 1);
//rest of sounds goes here

在此处查看完整答案:source

07-24 09:46