读书人

《Beginning Android Games》付出基本

发布时间: 2012-09-14 23:00:49 作者: rapoo

《Beginning Android Games》给出基本框架的实现(4)

最后的部分是剩下的关于音乐实现的部分,与最先给出的抽象接口/类对应,于音乐有关的三个类分别对应Audio,Music,Sound的具体实现,Audio是两者的统一管理,程序通过Audio来取得Music或Sound,下面是3者的具体实现

public class AndroidMusic implements Music, OnCompletionListener {MediaPlayer mediaPlayer;boolean isPrepared =false;public AndroidMusic(AssetFileDescriptor assetDescriptor){mediaPlayer=new MediaPlayer();try {mediaPlayer.setDataSource(assetDescriptor.getFileDescriptor(),assetDescriptor.getStartOffset(),assetDescriptor.getLength());mediaPlayer.prepare();isPrepared=true;mediaPlayer.setOnCompletionListener(this);} catch (Exception e) {throw new RuntimeException("Couldn't load music");}}@Overridepublic void dispose() {if(mediaPlayer.isPlaying()){mediaPlayer.stop();}mediaPlayer.release();}@Overridepublic boolean isLooping() {return mediaPlayer.isLooping();}@Overridepublic boolean isPlaying() {return mediaPlayer.isPlaying();}@Overridepublic boolean isStopped() {return !isPrepared;}@Overridepublic void pause() {}@Overridepublic void play() {if(mediaPlayer.isPlaying()){return;}try{synchronized (this) {if(!isPrepared){mediaPlayer.prepare();}mediaPlayer.start();}} catch (IllegalStateException e){e.printStackTrace();} catch (IOException e){e.printStackTrace();}}@Overridepublic void setLooping(boolean looping) {mediaPlayer.setLooping(looping);}@Overridepublic void setVolume(float volume) {mediaPlayer.setVolume(volume, volume);}@Overridepublic void stop() {mediaPlayer.stop();synchronized (this) {isPrepared=false;}}@Overridepublic void onCompletion(MediaPlayer arg0) {synchronized (this) {isPrepared=false;}}}
?

读书人网 >Android

热点推荐