Cocos2d Sootstep Sounds
Вероятно, это простой вопрос, однако у меня возникла проблема с попыткой воспроизвести простой звук шага при каждом контакте моего персонажа с землей:
Может ли кто-нибудь любезно взглянуть на это:
// I want to play a sound when the walk is at frame 4
[[SimpleAudioEngine SharedEngine]playEffect:@"footstep.mp3"];
[pleaseplaymysoundatthisframe@"walk%04d.png"];
Любая помощь высоко ценится!
2 ответа
Думаю, гораздо проще будет рассчитать необходимую задержку, что позволит воспроизвести ваш звук в нужный момент.
Или вы можете разделить анимацию на две части и создать последовательность действий. Первым действием будет CCAnimate с 0-4 кадрами анимации, затем действие CCCallFunc, которое вызовет метод для воспроизведения звука, а затем действие CCAnimate с остальными кадрами.
Вы можете сделать что-то вроде этого (пробег может отличаться, это просочилось из моей слабой памяти):
// i suppose you have your animFrames in some local var animFrames
// and your CCSprite in some other local/iVar frameOne
float animationDuration=0.8f;
int animationFrames=12;
float fourthFrameTime=animationDuration*4/animationFrames;
float animFrameDelay=animationDuration/animationFrames;
id animateSprite=[CCAnimation animationWithFrames:animFrames delay:animFrameDelay];
id playFootsteps = [CCSequence actions:[CCDelayTime actionWithDuration:fourthFrameTime],
[CCCallFunc actionWithTarget:self
selector:@selector(playFootSteps)],nil];
id spawn = [CCSpawn actions:animateSprite,playFootsteps,nil];
[frameOne runAction:spawn];
// and somewhere an
-(void) playFootSteps{
[[SimpleAudioEngine SharedEngine]playEffect:@"footstep.mp3"];
}
если это повторяющаяся тема в вашем приложении, я предлагаю вам создать менеджер мета-звука, который можно вызывать через самодельный протокол / интерфейс из любого экземпляра объекта (обычно с использованием 'singleton', чтобы придерживаться общего подхода cocos2d), и что вы управляете сложностью звука запуска / остановки / возобновления там.