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

2番目に、その作業:

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 に答える