1

为什么这段代码不起作用?

-(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

谢谢

4

1 回答 1

2

arc4random()返回一个uint32_t(aka unsigned int),因此

- (arc4random() % 2500)

计算为无符号整数,给出范围内的一些大数

2^32 - 2500 ... 2^32 - 1

然后将其转换为float. 如果您将代码更改为

float impulse =  - (int)(arc4random() % 2500) ;

然后你会得到预期的结果。

于 2013-04-09T17:15:32.463 回答