SpriteKit/Objective-C - обнаружение касания внутри узлов

Я делаю игру в SpriteKit с Objective-C. У меня есть класс, который наследует SKNode:

@interface Card : SKNode

Затем я объявил SKSpriteNodes внутри этого класса и добавил их как дети:

cardSprite = [SKSpriteNode spriteNodeWithImageNamed:fileName]; //fileName corresponds with an image asset
[self addChild:cardSprite];

Затем я создаю объект Card и добавляю его в качестве ребенка в свою основную GameScene. Мне интересно, как сделать обнаружение касания на SKSpriteNode внутри объекта Card. Обычно я использую имя для каждого узла для обнаружения касания, но это, похоже, не работает, когда имя задается изнутри объекта Карты, а не в GameScene.

+1
источник поделиться
1 ответ

Вот как я это делаю:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInNode:self];
    [self handleTouchedPoint:location]; // Cleans 'touchesBegan' method by carrying over needed code elsewhere.
}

/** Handle touches. */
- (void)handleTouchedPoint:(CGPoint)touchedPoint {
    SKNode *touchedNode = [self nodeAtPoint:touchedPoint];

    // Detects which node was touched by utilizing names.
    if ([touchedNode.name isEqualToString:@"God"]) {
        NSLog(@"Touched world");
    }
    if ([touchedNode.name isEqualToString:@"Tiles"]) {
        NSLog(@"Touched map");
    }
    if ([touchedNode.name isEqualToString:@"Player Character"]) {
        NSLog(@"Touched player");
    }
    if ([touchedNode.name isEqualToString:@"Test Node"]) {
        NSLog(@"Touched test node");
    }
}

PS "Test Node" - это SKSpriteNode, созданный в моем классе Player (который также является SKSpriteNode), чтобы проверить, не затрагивают ли его проблемы. Они делают.

0
источник

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