为什么这段代码不能工作?
-(void)tick:(ccTime)dt
{
......
float impulse = - (arc4random() % 2500) ;
cpBody *body = cpShapeGetBody(player.shape);
cpBodyApplyImpulse(body, cpv( 0 , impulse), cpv(0,0));
.....
}这段代码行得通吗?
-(void)tick:(ccTime)dt
{
......
float impulse = arc4random() % 2500 ;
cpBody *body = cpShapeGetBody(player.shape);
cpBodyApplyImpulse(body, cpv( 0 ,(- impulse)), cpv(0,0));
.....
}我真的不明白为什么如果我在不同的地方改变“冲动”的符号,代码就能正常工作或不能正常工作。问题是否与arc4random函数有关??
在第一个代码中有“冲量”值...
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在第二种情况下,这项工作:
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有人能给我解释一下吗?我使用XCode 4.6和cocos2d 2.0
谢谢
发布于 2013-04-10 01:15:32
arc4random()返回一个uint32_t (也称为unsigned int),因此
- (arc4random() % 2500)作为无符号整数计算,给出范围内的一些较大的数字
2^32 - 2500 ... 2^32 - 1然后将其转换为float。如果您将代码更改为
float impulse = - (int)(arc4random() % 2500) ;然后你就会得到预期的结果。
https://stackoverflow.com/questions/15908180
复制相似问题