2011-07-06 24 views
4

「ボール」に最も近い「プレーヤー」を見つけようとしており、これらのオブジェクトのそれぞれがCCSpriteオブジェクトです。これはここで、これまでに私のコードです私の最初のアプリですので、これを行うには良い方法があるなら、それを提案すること自由に感じ:)最も近いCCSpriteを見つける

for(CCSprite *currentPlayer in players) { 

     // distance formula 
     CGFloat dx = ball.position.x - currentPlayer.position.x; 
     CGFloat dy = ball.position.y - currentPlayer.position.y; 
     CGFloat distance = sqrt(dx*dx + dy*dy); 

     // add the distance to the distances array 
     [distances addObject:[NSNumber numberWithFloat:distance]]; 

     NSLog(@"This happen be 5 times before the breakpoint"); 
     NSLog(@"%@", [NSNumber numberWithInt:distance]); 

} 

だから、これがうまく動作するようです。ボールからプレーヤーの距離を記録します。しかし、私のような私の「距離」配列をループ、とき:

for(NSNumber *distance in distances) { 

     NSLog(@"Distance loop"); 
     NSLog(@"%@", [NSNumber numberWithInt:distance]); 

} 

そして、これが220255312.のように、それぞれの時間を膨大な数を記録しているが、私はこのように私の距離の配列を宣言:

// setting the distance array 
NSMutableArray *distances = [[NSMutableArray alloc] init]; 

私は間違って何をしていますか?

ありがとうございました!このように、@の "%@" のための

答えて

4

使用距離:

for(NSNumber *distance in distances) { 

    NSLog(@"Distance loop"); 
    NSLog(@"%@", distance); 

} 

[のNSNumber numberWithInt:距離]あなたの最初の部分の距離で

はCGFloatです。

第2部分では、距離はNSNumberです。

numberWithIntは引数としてNSNumberを取ることができません。

希望すると便利です。

+0

助けになりました!私は正しい値を持っているように見える、乾杯マイキー! –

0
CCSprite *nearestPlayer; 
for(CCSprite *currentPlayer in players) { 
    if(nearestPlayer == nil){ 
     nearestPlayer = currentPlayer; 
    } 
    if(ccpDistance(ball.position, currentPlayer.position) < ccpDistance(ball.position, nearestPlayer.position)){ 
     nearestPlayer = currentPlayer; 
    } 
} 
関連する問題