好的,这是我更喜欢的方法,具体取决于您播放的是“背景音乐”声音还是“效果”声音:
如果您正在播放MP3 声音,即背景音乐:
1) 在精灵构造函数中添加一个参数来分配一个声音文件:
[MySpriteClass spriteWithSound:@"mySound.mp3"];
2) 只需使用:
// on touchDragged:
[[SimpleAudioEngine sharedEngine] playBackgroundMusic:self.sound];
// on touchEnded: touchCancelled:
[[SimpleAudioEngine sharedEngine] stopBackgroundMusic];
注意:这种方法很简单,因为您在任何给定时间只能播放一个 BGM。
如果您播放的是未压缩的声音,即效果:
1) 在精灵构造函数中添加一个参数来分配一个声音文件:
[MySpriteClass spriteWithSound:@"mySound.caf"];
2) 在存储返回值的同时在touchDragged:上播放效果:
// on touchDragged:
soundID = [[SimpleAudioEngine sharedEngine] playEffect:self.sound];
3) 使用soundID 停止对touchEnded: 的影响:
// on touchEnded: cancelled:
[[SimpleAudioEngine sharedEngine] stopEffect:soundID];
注意:这种方法更好,因为它允许您一次播放更多声音。
最后的话:
如果您有每个不同精灵的子类(即FishSprite、DogSprite、...等),这样任何给定类的 ALL 实例都具有相同的声音,它会最好添加静态方法来返回该类的声音名称:
// somewhere in DogSprite.m
+ (NSString *)soundName {
return @"bark.caf";
}
为了完整起见,添加一个实现touchDragged:、touchEnded:的超类,这样就没有多余的代码了:
// on touchDragged:
soundID = [[SimpleAudioEngine sharedEngine] playBackgroundMusic:[[self class] soundName]];
// on touchEnded: cancelled:
[[SimpleAudioEngine sharedEngine] stopEffect:soundID];