【发布时间】:2015-08-14 16:13:17
【问题描述】:
如果使用SKShapeNode 和SKSpriteNode,nodeAtPoint: 会给出不同的结果。如果我是正确的nodeAtPoint: 将使用containsPoint: 来检查哪些节点在给定点。
docu 声明containsPoint: 将使用其边界框。
我设置了一个简单的场景,在情况 1 中,圆圈是紫色节点的父节点,在情况 2 中,绿色节点是紫色节点的父节点。 在这两种情况下,我都单击了父级边界框应位于的区域。
结果不同。如果我使用SKSpriteNode nodeAtPoint: 会给我父母。如果我使用SKShapeNode,它会返回SKScene。
(我用鼠标按下的十字标记。)
代码:
第一次设置:
-(void)didMoveToView:(SKView *)view {
self.name = @"Scene";
SKShapeNode* circle = [SKShapeNode node];
circle.path = CGPathCreateWithEllipseInRect(CGRectMake(0, 0, 50, 50), nil);
circle.position = CGPointMake(20, 20);
circle.fillColor = [SKColor redColor];
circle.name = @"circle";
SKSpriteNode* pnode = [SKSpriteNode node];
pnode.size = CGSizeMake(50, 50);
pnode.position = CGPointMake(50, 50);
pnode.color = [SKColor purpleColor];
pnode.name = @"pnode";
[self addChild: circle];
[circle addChild: pnode];
}
第二次设置:
-(void)didMoveToView:(SKView *)view {
self.name = @"Scene";
SKSpriteNode* gnode = [SKSpriteNode node];
gnode.size = CGSizeMake(50, 50);
gnode.position = CGPointMake(30, 30);
gnode.color = [SKColor greenColor];
gnode.name = @"gnode";
SKSpriteNode* pnode = [SKSpriteNode node];
pnode.size = CGSizeMake(50, 50);
pnode.position = CGPointMake(30, 30);
pnode.color = [SKColor purpleColor];
pnode.name = @"pnode";
[self addChild: gnode];
[gnode addChild: pnode];
}
鼠标点击调用:
-(void)mouseDown:(NSEvent *)theEvent {
CGPoint location = [theEvent locationInNode:self];
NSLog(@"%@", [self nodeAtPoint: location].name);
}
我错过了什么吗?这是 SpriteKit 中的错误吗?它是按这种方式工作的吗?
【问题讨论】:
标签: sprite-kit skspritenode hittest skshapenode