Хорошо, вот подход, который я бы предпочел, в зависимости от того, воспроизводите ли вы звук «фоновой музыки» или звук «эффекта»:
Если вы воспроизводите звук MP3
, например фоновую музыку:
1) Добавьте в конструктор спрайта параметр для назначения звукового файла:
[MySpriteClass spriteWithSound:@"mySound.mp3"];
2) Просто используйте:
// on touchDragged:
[[SimpleAudioEngine sharedEngine] playBackgroundMusic:self.sound];
// on touchEnded: touchCancelled:
[[SimpleAudioEngine sharedEngine] stopBackgroundMusic];
ПРИМЕЧАНИЕ. Этот подход прост, потому что вы можете воспроизводить только одну фоновую музыку в любой момент времени.
Если вы воспроизводите несжатый звук, например эффект:
1) Добавьте в конструктор спрайта параметр для назначения звукового файла:
[MySpriteClass spriteWithSound:@"mySound.caf"];
2) Воспроизвести эффект на touchDragged:
, сохранив возвращаемое значение:
// on touchDragged:
soundID = [[SimpleAudioEngine sharedEngine] playEffect:self.sound];
3) Остановить эффект на touchEnded:
с помощью soundID
:
// on touchEnded: cancelled:
[[SimpleAudioEngine sharedEngine] stopEffect:soundID];
ПРИМЕЧАНИЕ. Этот подход лучше, поскольку позволяет воспроизводить больше звуков одновременно.
Заключительные замечания:
Если у вас есть подклассы каждого отдельного спрайта (например, FishSprite
, DogSprite
, ... и т. д.), так что ВСЕ экземпляры любого заданного класса имеют одинаковый звук, было бы лучше добавить статический метод к вернуть звуковое имя для этого класса:
// 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];
person
Mazyod
schedule
11.09.2012