2016-03-02 2 views
1

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

@interface Card : SKNode 

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

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

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

+0

Были уже некоторые сообщения на StackOverflow об этом. Вы можете начать с этого: http://stackoverflow.com/a/19489006/3402095 – Whirlwind

ответ

0

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

- (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"); 
    } 
} 

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

Смежные вопросы