Reputation: 136
Why this code don't work?
-(void)tick:(ccTime)dt
{
......
float impulse = - (arc4random() % 2500) ;
cpBody *body = cpShapeGetBody(player.shape);
cpBodyApplyImpulse(body, cpv( 0 , impulse), cpv(0,0));
.....
}
and this code work??
-(void)tick:(ccTime)dt
{
......
float impulse = arc4random() % 2500 ;
cpBody *body = cpShapeGetBody(player.shape);
cpBodyApplyImpulse(body, cpv( 0 ,(- impulse)), cpv(0,0));
.....
}
I dont really understand why if I change sign of "impulse" in different place, the code work or don't work correctly. Is a problem related to arc4random function??
there are "impulse" values in first code....
2013-04-09 18:28:31.697 ProvaCocos2D[7086:907] impulse 4294967296.000000
2013-04-09 18:28:31.864 ProvaCocos2D[7086:907] impulse 4294966016.000000
2013-04-09 18:28:32.197 ProvaCocos2D[7086:907] impulse 4294966016.000000
2013-04-09 18:28:33.197 ProvaCocos2D[7086:907] impulse 4294966272.000000
2013-04-09 18:28:33.864 ProvaCocos2D[7086:907] impulse 4294964992.000000
2013-04-09 18:28:34.197 ProvaCocos2D[7086:907] impulse 4294967296.000000
2013-04-09 18:28:35.197 ProvaCocos2D[7086:907] impulse 4294967040.000000
2013-04-09 18:28:35.531 ProvaCocos2D[7086:907] impulse 4294966528.000000
in the second, that work:
2013-04-09 19:05:38.492 ProvaCocos2D[7158:907] impulse 1712.000000
2013-04-09 19:05:38.994 ProvaCocos2D[7158:907] impulse 2365.000000
2013-04-09 19:05:39.320 ProvaCocos2D[7158:907] impulse 630.000000
2013-04-09 19:05:39.486 ProvaCocos2D[7158:907] impulse 331.000000
2013-04-09 19:05:40.153 ProvaCocos2D[7158:907] impulse 2268.000000
2013-04-09 19:05:40.486 ProvaCocos2D[7158:907] impulse 2166.000000
Can anyone explain me? I use XCode 4.6 and cocos2d 2.0
Thanks
Upvotes: 1
Views: 135
Reputation: 539735
arc4random()
returns an uint32_t
(aka unsigned int
), therefore
- (arc4random() % 2500)
is computed as unsigned integer, giving some large number in the range
2^32 - 2500 ... 2^32 - 1
which is then converted to a float
. If you change your code to
float impulse = - (int)(arc4random() % 2500) ;
then you get the expected results.
Upvotes: 2