这可能是一个简单的问题,但是每次我的角色与地面接触时尝试播放简单的脚步声时都会遇到问题:
有人可以看看这个:
// I want to play a sound when the walk is at frame 4
[[SimpleAudioEngine SharedEngine]playEffect:@"footstep.mp3"];
[pleaseplaymysoundatthisframe@"walk%04d.png"];
非常感谢任何帮助!
这可能是一个简单的问题,但是每次我的角色与地面接触时尝试播放简单的脚步声时都会遇到问题:
有人可以看看这个:
// I want to play a sound when the walk is at frame 4
[[SimpleAudioEngine SharedEngine]playEffect:@"footstep.mp3"];
[pleaseplaymysoundatthisframe@"walk%04d.png"];
非常感谢任何帮助!
我认为,更简单的是计算所需的延迟,这将允许在需要的时刻播放你的声音。
或者您可以将动画分成两部分并创建一系列动作。第一个动作将是具有 0-4 帧动画的 CCAnimate,然后是调用方法播放声音的 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"];
}
如果这是您的应用程序中反复出现的主题,我建议您创建一个元声音管理器,该管理器可以通过任何对象实例的本地协议/接口调用(通常使用“单例”,以坚持 cocos2d 的一般方法),并且您在那里管理声音开始/停止/恢复的复杂性。