Найти ближайший CCSprite - PullRequest
4 голосов
/ 06 июля 2011

Я пытаюсь найти ближайшего «игрока» к «мячу», и каждый из этих объектов является объектами 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];

Что я делаю не так?

Спасибо за ваше время!

Ответы [ 2 ]

4 голосов
/ 06 июля 2011

Используйте расстояние для @ "% @" следующим образом:

for(NSNumber *distance in distances ) {

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

}

[NSNumber numberWithInt: distance]

В вашей первой части расстояния находится CGFloat.

Во второй части расстояния указан NSNumber.

numberWithInt не может принять NSNumber в качестве аргумента.

Надеюсь, это поможет!

0 голосов
/ 11 июня 2014
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;
    }
}
...