我正在Android中开发一个简单的游戏。我想为每个触摸添加声音效果
事件。但是,我添加了贯穿整个游戏的背景音效。但
如何为触摸游戏的任何角色添加微小的声音效果。为了更好的理解
以下是我的类(class)设计:
我有一个主要 Activity ,作为 View ,我正在调用扩展的 GameView 类
表面 View 。对于 bacground 声音,我只是在 mainActivity 创建了声音,然后调用
GameView 类如下:
public class MainActivity extends Activity {
MediaPlayer backgroundMusic;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
backgroundMusic = MediaPlayer.create(MainActivity.this, R.raw.bg);
backgroundMusic.setLooping(true);
backgroundMusic.setVolume(10.0f, 3.0f);
backgroundMusic.start();
setContentView(new GameView(this));
}
}
以下是我的 GameView 类。我想在这个类的 onTouchEvent 中添加声音效果,如下所示:
public class GameView extends SurfaceView {
@Override
public boolean onTouchEvent(MotionEvent event) {
//checking condition I want to give different sound here.
}
}
我尝试将其作为 mainActivity (即使用 MediaPlayer.creat() ),但它显示错误。
有人知道如何在我的类(class)设计的基础上添加这样的音效吗?
最佳答案
对于爆炸、硬币收集等短音效,最好使用 SoundPool
。
您只需要创建一个声音池:
SoundPool sp = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
在 Lollipop 及更高版本中:
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
您需要将上下文传递给 load 方法,因此您要么在 Activity 中执行此操作,要么从其他地方获取。
播放声音的最后一步是调用
play
方法:sp.play(soundIds[0], 1, 1, 1, 0, 1.0);
参数是:
您需要记住,
SoundPool
不应使用超过 1MB 的媒体文件,文件越小,效果和性能越好。确保在完成后释放
SoundPool
或 Activity.onDestroy
。sp.release();
希望这可以帮助
关于android - Android中的游戏音效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19272646/