我想为我的每个玩家活动添加声音效果,例如死亡。我应该使用soundpool还是meidaplayer?我该怎么做?为了更好地理解以下是我的课程设计,我有一个主要的活动类“游戏”从视图我称之为“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
答案 0 :(得分:1)
对于爆炸,硬币收集等短音效,最好使用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作为声音流。
请务必在“活动”中设置音量控制,以便用户能够更改正确的音量:
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