4

「ボール」に最も近い「プレーヤー」を見つけようとしています。これらのオブジェクトはそれぞれ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]);

}

したがって、これはうまく機能しているようです。ボールからのプレーヤーの各距離を記録します。しかし、次のように「distances」配列をループすると、次のようになります。

for(NSNumber *distance in distances ) {

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

}

そして、これは220255312のように、毎回膨大な数をログに記録しています。距離配列を次のように宣言します。

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

私は何が間違っているのですか?

御時間ありがとうございます!

4

2 に答える 2

4

次のように@"%@"の距離を使用します。

for(NSNumber *distance in distances ) {

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

}

[NSNumber numberWithInt:distance]

最初の部分の距離はCGFloatです。

2番目の部分の距離はNSNumberです。

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

お役に立てれば!

于 2011-07-06T10:16:06.407 に答える
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;
    }
}
于 2014-06-11T07:09:56.423 に答える