0

Что я хочу сделать: расширить SKNode с настраиваемым свойством, простым int, а затем использовать его с enumerateChildNodesWithName:usingBlock:.Добавление пользовательских свойств в SKNode и их использование с помощью 'enumerateChildNodesWithName: usingBlock:'

Поскольку я являюсь новичком, мне не удалось понять учебники о том, как это сделать с помощью свойства userData SKNode. Я также попытался создать подкласс NSObject/SKNode и добавить там свойство. Но тогда мне не удалось заставить его работать с enumerateChildNodesWithName:usingBlock:.

Расширение SKNode показалось мне более прямым.

компилятор не жалуется на следующий код:

SKNode_weight.h

@interface SKNode() 
    @property int weight; 
    @end 

MyScene.h

#import "SKNode_weight.h" 

MyScene.m

#import "MyScene.h" 
    #import "SKNode_weight.h" 

    @implementation MyScene 

    -(void) spawnBall {  
     SKNode *ballNode = [SKNode node]; 
     ballNode.weight = 10; // fixed value for simplicity 
     ballNode.name = @"ball"; 

     [self addChild:ballNode]; 
    } 

    -(id)initWithSize:(CGSize)size { 
     if (self = [super initWithSize:size]) { 
      [self spawnBall]; 
     } 
     return self; 
    } 

    -(void) sumWeight{ 
     [self enumerateChildNodesWithName:@"ball" usingBlock:^(SKNode *node, BOOL *stop) { 
       NSLog(@"%i", node.weight); 
     }]; 
    } 
    @end 

Билд является успешным л, но я получаю следующее сообщение об ошибке:

-[SKNode setWeight:]: unrecognised selector sent to instance 0x96328f0 

Я надеюсь, что кто-нибудь может дать пример быстрого и безболезненного решения. Спасибо, Flo

ответ

1

Невозможно добавить участников и свойств в существующий класс с помощью методов только для категорий.

http://developer.apple.com/library/ios/#documentation/General/Conceptual/DevPedia-CocoaCore/Category.html

Лучший способ будет подкласс SKNode и добавить веса свойство подкласса.

Тогда используйте его, как если бы вы использовали категорию с небольшими отличиями.

#import "MyScene.h" 
#import "SKNodeWeighted.h" 

    @implementation MyScene 

    -(void) spawnBall {  
     SKNodeWeighted *ballNode = [SKNodeWeighted node]; 
     ballNode.weight = 10; // fixed value for simplicity 
     ballNode.name = @"ball"; 

     [self addChild:ballNode]; 
    } 

    -(id)initWithSize:(CGSize)size { 
     if (self = [super initWithSize:size]) { 
      [self spawnBall]; 
     } 
     return self; 
    } 

    -(void) sumWeight{ 
     [self enumerateChildNodesWithName:@"ball" usingBlock:^(SKNode *node, BOOL *stop) { 
       if ([node isKindOfClass:[SKNodeWeighted class]])     { 
        NSLog(@"%i", ((SKNodeWeighted*)node).weight); 
       } 
     }]; 
    } 
    @end 

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

  • Нет связанных вопросов^_^