2011-07-06 6 views
4

J'essaie de trouver le "joueur" le plus proche d'une "balle" et chacun de ces objets sont des objets CCSprite. Ceci est ma première application, donc s'il y a une meilleure façon de le faire, ne hésitez pas à le suggérer :)Trouver le CCSprite le plus proche

Voici mon code à ce jour:

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]); 

} 

Donc, cela semble bien fonctionner; il enregistre chaque distance du joueur de la balle. Mais quand je boucle à travers mon tableau, comme « distances » ceci:

for(NSNumber *distance in distances) { 

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

} 

Et cela enregistre un grand nombre chaque fois, comme 220255312. Je déclare mon tableau distances comme ceci:

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

Qu'est-ce que je fais mal?

Merci pour votre temps!

Répondre

4

Utilisez la distance pour le @ "% @" comme ceci:

for(NSNumber *distance in distances) { 

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

} 

[NSNumber numberWithInt: distance]

Dans votre première distance de la pièce est un CGFloat.

Dans la deuxième partie, la distance est un NSNumber.

numberWithInt ne peut pas prendre un NSNumber comme argument.

Espérons que cela aide!

+0

Cela a aidé! On dirait que j'ai toujours eu les bonnes valeurs, Cheers Mikey! –

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; 
    } 
} 
Questions connexes