SKSpriteNode с сенсорного обнаружения изображения

У меня есть SKSpriteNode из изображения:

enter image description here

Когда я пытаюсь обнаружить такое касание:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInNode:self];
    SKNode *node = [self nodeAtPoint:location];
    if ([node.name isEqualToString:@"shape"]) {
        NSLog(@"TOUCH DETECT");
    }
}

он обнаруживает прикосновение, даже если я касаюсь внешней голубой формы в углах. Он имеет квадратную форму для обнаружения касания. Как обойти это? Я хочу обнаружить касание только внутри формы blu.

Marko

0
источник поделиться
1 ответ
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInNode:self];
    SKNode *node = [self nodeAtPoint:location];
    if ([node.name isEqualToString:@"shapeMask"]) {
        //Whatever you want.
    }
}
-(void)blueShape{
    SKSpriteNode *blueShape = [SKSpriteNode spriteNodeWithImageNamed:@"blueShape"];
    blueShape.position = yourPosition;
    blueShape.name = @"blueShape";
    [self addChild:blueShape];

    SKShapeNode *shapeMask = [SKShapeNode node];
    shapeMask.name = @"shapeMask";
    CGFloat offsetX = blueShape.frame.size.width * blueShape.anchorPoint.x;
    CGFloat offsetY = blueShape.frame.size.height * blueShape.anchorPoint.y;

    CGMutablePathRef path = CGPathCreateMutable();

    CGPathMoveToPoint(path, NULL, 0 - offsetX, 137 - offsetY);
    CGPathAddLineToPoint(path, NULL, 80 - offsetX, 1 - offsetY);
    CGPathAddLineToPoint(path, NULL, 239 - offsetX, 2 - offsetY);
    CGPathAddLineToPoint(path, NULL, 318 - offsetX, 139 - offsetY);
    CGPathAddLineToPoint(path, NULL, 238 - offsetX, 275 - offsetY);
    CGPathAddLineToPoint(path, NULL, 80 - offsetX, 274 - offsetY);
    //Values may not be accurate. You can set yourself with shape tool.
    CGPathCloseSubpath(path);

    [shapeMask setPath:path];
    [blueShape addChild:shapeMask];
}
+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос