我正在尝试找到最接近“球”的“玩家”,并且每个对象都是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];
我做错了什么?
谢谢你的时间!
答案 0 :(得分:4)
使用@“%@”的距离,如下所示:
for(NSNumber *distance in distances ) {
NSLog(@"Distance loop");
NSLog(@"%@", distance);
}
[NSNumber numberWithInt:distance]
在你的第一部分中,距离是CGFloat。
在第二部分中,距离是NSNumber。
numberWithInt不能将NSNumber作为其参数。
希望这有帮助!
答案 1 :(得分: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;
}
}