Cocos2d shake/accelerometer issue.

Posted by Ryan Poolos on Stack Overflow See other posts from Stack Overflow or by Ryan Poolos
Published on 2011-01-08T02:40:08Z Indexed on 2011/01/08 2:54 UTC
Read the original article Hit count: 288

So I a little backstory. I wanted to implement a particle effect and sound effect that both last about 3 sec or so when the user shakes their iDevice. But first issue arrived when the build in UIEvent for shakes refused to work. So I took the advice of a few Cocos veterans to just use some script to get "violent" accelerometer inputs as shakes. Worked great until now.

The problem is that if you keep shaking it just stacks the particle and sounds over and over. Now this wouldn't be that big of a deal except it happens even if you are careful to try and not do so. So what I am hoping to do is disable the accelerometer when the particle effect/sound effect start and then reenable it as soon as they finish. Now I don't know if I should do this by schedule, NStimer, or some other function. I am open to ALL suggestions. here is my current "shake" code.

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {

    const float violence = 1;
    static BOOL beenhere;
    BOOL shake = FALSE;

    if (beenhere) return;
    beenhere = TRUE;
    if (acceleration.x > violence * 1.5 || acceleration.x < (-1.5* violence))
        shake = TRUE;
    if (acceleration.y > violence * 2 || acceleration.y < (-2 * violence))
        shake = TRUE;
    if (acceleration.z > violence * 3 || acceleration.z < (-3 * violence))
        shake = TRUE;
    if (shake) {
        id particleSystem = [CCParticleSystemQuad particleWithFile:@"particle.plist"];
        [self addChild: particleSystem];

    // Super simple Audio playback for sound effects!

        [[SimpleAudioEngine sharedEngine] playEffect:@"Sound.mp3"];
        shake = FALSE;
    }

    beenhere = FALSE;
}

© Stack Overflow or respective owner

Related posts about cocos2d-iphone

Related posts about shake