Sprite Kit bodyAtPoint和bodyInRect返回不正确的值?

我创build了一个非常简单的示例代码,只是一个场景,一个精灵节点20x20px,在屏幕上的0.0点。 当我打电话给scene.physicsWorld bodyAtPoint它返回我这个节点,即使在点,例如:34×34。 但是在35×35点它返回null 。 所以基本上所有从0px到34px的点都返回这个节点,从35px开始,它不再返回。 任何想法可能是什么原因,如果精灵明显地结束在20px 20px? 在bodyInRect可以看到相同的行为。

这里是示例代码:

 -(id)initWithSize:(CGSize)size { if (self = [super initWithSize:size]) { /* Setup your scene here */ self.backgroundColor = [SKColor colorWithRed:0.15 green:0.15 blue:0.3 alpha:1.0]; self.physicsWorld.gravity = CGVectorMake(0, 0); SKSpriteNode *node = [[SKSpriteNode alloc] initWithColor:[UIColor whiteColor] size:CGSizeMake(20, 20)]; node.position = CGPointMake(10, 10); node.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(20, 20)]; [self addChild:node]; } return self; } -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { for (UITouch *touch in touches) { CGPoint location = [touch locationInNode:self]; if([self.physicsWorld bodyAtPoint:location]) { NSLog(@"Detected at point: %f %f", location.x, location.y); }else{ NSLog(@"No node at point: %f %f", location.x, location.y); } } } 

这里是控制台日志:

 2013-11-09 15:05:52.822 SKTest[43143:70b] Detected at point: 2.000000 1.000000 2013-11-09 15:05:56.274 SKTest[43143:70b] Detected at point: 3.000000 7.000000 2013-11-09 15:05:57.006 SKTest[43143:70b] Detected at point: 3.000000 11.000000 2013-11-09 15:05:58.199 SKTest[43143:70b] Detected at point: 3.000000 12.000000 2013-11-09 15:05:58.918 SKTest[43143:70b] Detected at point: 3.000000 14.000000 2013-11-09 15:05:59.785 SKTest[43143:70b] Detected at point: 3.000000 17.000000 2013-11-09 15:06:00.685 SKTest[43143:70b] Detected at point: 3.000000 20.000000 2013-11-09 15:06:01.565 SKTest[43143:70b] Detected at point: 3.000000 22.000000 2013-11-09 15:06:02.915 SKTest[43143:70b] Detected at point: 3.000000 25.000000 2013-11-09 15:06:04.285 SKTest[43143:70b] Detected at point: 3.000000 30.000000 2013-11-09 15:06:05.387 SKTest[43143:70b] Detected at point: 3.000000 34.000000 2013-11-09 15:06:08.492 SKTest[43143:70b] No node at point: 4.000000 38.000000 2013-11-09 15:06:12.499 SKTest[43143:70b] Detected at point: 4.000000 5.000000 2013-11-09 15:06:13.240 SKTest[43143:70b] Detected at point: 6.000000 5.000000 2013-11-09 15:06:13.881 SKTest[43143:70b] Detected at point: 10.000000 5.000000 2013-11-09 15:06:15.064 SKTest[43143:70b] Detected at point: 12.000000 5.000000 2013-11-09 15:06:16.120 SKTest[43143:70b] Detected at point: 14.000000 5.000000 2013-11-09 15:06:16.873 SKTest[43143:70b] Detected at point: 16.000000 5.000000 2013-11-09 15:06:17.582 SKTest[43143:70b] Detected at point: 18.000000 5.000000 2013-11-09 15:06:18.066 SKTest[43143:70b] Detected at point: 21.000000 5.000000 2013-11-09 15:06:18.966 SKTest[43143:70b] Detected at point: 24.000000 5.000000 2013-11-09 15:06:19.585 SKTest[43143:70b] Detected at point: 31.000000 5.000000 2013-11-09 15:06:20.531 SKTest[43143:70b] Detected at point: 35.000000 5.000000 2013-11-09 15:06:22.581 SKTest[43143:70b] No node at point: 36.000000 4.000000 2013-11-09 15:06:26.560 SKTest[43143:70b] Detected at point: 19.000000 16.000000 2013-11-09 15:06:27.933 SKTest[43143:70b] Detected at point: 20.000000 17.000000 2013-11-09 15:06:29.856 SKTest[43143:70b] Detected at point: 25.000000 19.000000 2013-11-09 15:06:31.487 SKTest[43143:70b] Detected at point: 26.000000 22.000000 2013-11-09 15:06:33.850 SKTest[43143:70b] Detected at point: 29.000000 27.000000 2013-11-09 15:06:35.492 SKTest[43143:70b] Detected at point: 31.000000 29.000000 2013-11-09 15:06:36.854 SKTest[43143:70b] Detected at point: 35.000000 32.000000 2013-11-09 15:06:40.004 SKTest[43143:70b] No node at point: 40.000000 34.000000 

这有可能是一个苹果的bug,在nodeAtPointnodeInRect ? 很难去相信。 但代码太短,我看不出在这里可能犯了什么错误。 任何帮助将不胜感激。

我对此做了一些尝试。 当我放大精灵的时候,我注意到的是身体区域似乎比精灵大。 我不得不将精灵大小除以1.15,以使得身体矩形与所有4边上显示的精灵大致匹配。 不知道为什么。 我从来没有玩游戏的问题,所以也许nodeAtPoint有一个阈值范围?

 SKSpriteNode *node = [SKSpriteNode spriteNodetWithColor:[SKColor whiteColor] size:CGSizeMake(200, 200)]; node.position = CGPointMake(200, 200); CGRect bodySize = CGSizeMake(node.size.width / 1.15, node.size.height / 1.15); node.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:bodySize]; [self addChild:node]; 

我在Retina 4“和非Retina iPad模拟器上进行了testing。