# applyAngularVelocity causes error when called right after object instantiation

I'm trying to make a physicsBody rotate as soon as it is instantiated.

CCNode* ball = [CCBReader load:@"Ball"]; [ball.physicsBody applyForce:force]; [ball.physicsBody applyAngularImpulse:arc4random_uniform(360) - 180]; 

Applying force works fine, the last line however throws an error in cpBody.c line 123: cpAssertHard(body->w == body->w && cpfabs(body->w) != INFINITY, "Body's angular velocity is invalid.");

When I don't apply force and merely rotate the problem persists. If I send applyAngularImpulse at some later point (in this case on a touch) it does work. Is this function not supposed to be called right after instantiation, or is this a bug?

## 1 Answer

The problem was in CCPhysicsBody.m. Upon instantiation the body's moment is 0, causing divide by zero errors, making the angular velocity NaN.

I fixed it by changing the function to the code below:

-(void)applyAngularImpulse:(CGFloat)impulse { if (_body.moment == 0) _body.angularVelocity += impulse; else _body.angularVelocity += impulse/_body.moment; }

Another error in my code was that arc4random_uniform returns an unsigned integer, thus creating very large numbers when going below 0. Casting to a signed integer solves that problem.

EDIT: This fix does however cause the object to go spinning wildly. In the didLoadFromCCB override I start a timer spawning these objects. Apparently, creating objects with physics while in this method doesn't end well. A proper workaround would be to call scheduleOnce with a delay of 0.1 on a function to apply the angular velocity properly.