首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >arc4random符号

arc4random符号
EN

Stack Overflow用户
提问于 2013-04-10 01:09:55
回答 1查看 126关注 0票数 1

为什么这段代码不能工作?

代码语言:javascript
复制
-(void)tick:(ccTime)dt
   {
    ......

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

    cpBody *body = cpShapeGetBody(player.shape);

    cpBodyApplyImpulse(body, cpv( 0 , impulse), cpv(0,0));

    .....

    }

这段代码行得通吗?

代码语言:javascript
复制
 -(void)tick:(ccTime)dt
    {
    ......

    float impulse =  arc4random() % 2500 ;

    cpBody *body = cpShapeGetBody(player.shape);

    cpBodyApplyImpulse(body, cpv( 0 ,(- impulse)), cpv(0,0));

    .....

    }

我真的不明白为什么如果我在不同的地方改变“冲动”的符号,代码就能正常工作或不能正常工作。问题是否与arc4random函数有关??

在第一个代码中有“冲量”值...

代码语言:javascript
复制
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

在第二种情况下,这项工作:

代码语言:javascript
复制
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

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-10 01:15:32

arc4random()返回一个uint32_t (也称为unsigned int),因此

代码语言:javascript
复制
- (arc4random() % 2500)

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

代码语言:javascript
复制
2^32 - 2500 ... 2^32 - 1

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

代码语言:javascript
复制
float impulse =  - (int)(arc4random() % 2500) ;

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15908180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档