我想为每个玩家事件(如死亡事件)添加声音效果。我应该使用音池还是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