这可能是一个简单的问题,但是每次我的角色与地面接触时我都会尝试播放一个简单的脚步声:
有人可以看看这个:
// I want to play a sound when the walk is at frame 4
[[SimpleAudioEngine SharedEngine]playEffect:@"footstep.mp3"];
[pleaseplaymysoundatthisframe@"walk%04d.png"];
非常感谢任何帮助!
答案 0 :(得分:0)
我认为,更简单的是计算所需的延迟,这将允许在所需的时刻播放您的声音。
或者您可以将动画分成两部分并创建一系列动作。第一个动作是CCAnimate,动画为0-4帧,而CCCallFunc动作将调用方法播放声音,然后CCAnimate动作与其余帧动作。
答案 1 :(得分:0)
你可以做这样的事情(里程可能会有所不同,这是从我脆弱的记忆中泄露出来的):
// 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的一般方法),你在那里管理声音开始/停止/恢复的复杂性。