Cocos2d足迹声音

时间:2012-08-28 06:39:29

标签: xcode cocos2d-iphone

这可能是一个简单的问题,但是每次我的角色与地面接触时我都会尝试播放一个简单的脚步声:

有人可以看看这个:

// I want to play a sound when the walk is at frame 4
[[SimpleAudioEngine SharedEngine]playEffect:@"footstep.mp3"];
[pleaseplaymysoundatthisframe@"walk%04d.png"];

非常感谢任何帮助!

2 个答案:

答案 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的一般方法),你在那里管理声音开始/停止/恢复的复杂性。