精灵套件 - 命名重复的对象

时间:2014-03-14 21:30:06

标签: ios xcode5 sprite-kit

使用apple spritekit,我怎样才能唯一地识别节点,如果说20个节点,它们具有相同的艺术作品并且要随机放置在屏幕上?是否有更快的方式,如在cocos2d中有一个"标签"功能识别?

3 个答案:

答案 0 :(得分:2)

我通常使用属性名称:

SKNode *myNode = [[SKNode alloc]init];
myNode.name = @"uniqueName";
[self addChild:myNode];

在SKScene中,要恢复节点,您可以这样做:

[self childNodeWithName:@"uniqueName"];  // self is SKScene

如果由于某种原因您不想使用名称,您可以始终将一个SKNode子类化并添加您的个人唯一标识符:

MySpriteNode.h

@interface MySpriteNode : SKSpriteNode

@property (nonatomic, strong) NSString *personalIdentifier;

@end 

和     MySpriteNode.m

#import "MySpriteNode.h"

@implementation MySpriteNode

@end

使用第二个选项,您可以:

for (MySpriteNode *sprite in [self children]) personalIdentifier
    {
        if ([sprite.personalIdentifier isEqualToString:@"something"])
        {
            //do something
        }
    }

编辑1:

尝试按照这些教程,我真的认为它们很棒。我和他们学到了很多东西:

答案 1 :(得分:2)

我不是最熟练的精灵,但这是你正在寻找的东西吗?

保存:

NSArray * nodesArray; // some array of nodes.
for (int x = 0; x < nodesArray.count; x++) {
    SKNode * node = nodesArray[x];
    node.name = [NSString stringWithFormat:@"%i", x];
}

提取:

int nodeToRetrieveTag = 2; // or whatever
SKNode* nodeToRetrieve = [self.scene childNodeWithName:[NSString stringWithFormat:@"%i", nodeToRetrieveTag]];

答案 2 :(得分:0)

您在寻找enumerateChildNodesWithName:usingBlock:方法吗?