Sprite Kit bodyAtPoint und bodyInRect geben falsche Werte zurück?
Ich habe einen sehr einfachen Beispielcode erstellt, nur eine Szene, einen Sprite-Knoten 20x20px, bei Punkt 0.0 auf dem Bildschirm. Wenn ich anrufescene.physicsWorld bodyAtPoint
es gibt mir diesen knoten auch an punkt zb: 34x34 zurück. Aber bei Punkt 35x35 kehrt es zurücknull
. Grundsätzlich geben alle Punkte von 0px bis 34px in beiden Achsen diesen Knoten zurück. Ab 35px wird er nicht mehr zurückgegeben. Irgendeine Idee, woran das liegen könnte, wenn das Sprite sichtbar bei 20px 20px endet? Das gleiche Verhalten ist in zu sehenbodyInRect
.
Hier ist der Beispielcode:
-(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);
}
}
}
Und hier ist das Konsolenprotokoll:
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
Ist das möglich, dass es sich in beiden Fällen um einen Apple-Fehler handelt?nodeAtPoint
undnodeInRect
? Es ist schwer zu glauben. Aber der Code ist so kurz, dass ich nicht sehen kann, wo hier ein Fehler hätte gemacht werden können. Jede Hilfe wird sehr geschätzt.