计算图层上某个类的CCNode数

时间:2014-03-30 00:06:57

标签: ios objective-c xcode cocos2d-iphone

非常简单的问题。我在Objective C(cocos2d)中工作,我试图计算某个类的精灵的数量在当前显示的图层上。例如,我有一个名为Seal的类,它是CCNode的子类,在我当前的层中,我想要计算有多少类型为Seal的实例。

我知道如何通过

来计算图层的子项数
int numberChildren = [[self children] count];

正确返回图层上的子项数。但我只想要在我的图层上Seal的数量。我怎么能这样做?谢谢=)

2 个答案:

答案 0 :(得分:2)

您可以使用谓词函数执行此操作,例如:

NSArray * nodes = [self children];

NSIndexSet * sealSet = [nodes indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop)
{
    return [obj isKindOfClass:[Seal class]];
}];

NSArray * sealArray = [nodes objectsAtIndexes:sealSet];
NSUInteger numberOfSeals = [sealArray count];

编辑: 实际上你不必将密封件存放在一个新的阵列中,你可以简单地计算它们:

NSUInteger numberOfSeals = [sealSet count];

答案 1 :(得分:1)

你可以尝试下面没有使用数组的代码,因此内存占用量更少 -

NSInteger sealCounter = 0;
for(id item in [self children])     
     if([item isKindOfClass:[Seal class])
         sealCounter++; //After the for loop ends you can know how many Seals you have

但是如果你想在计算它们之后只在Seals上运行一些动作,那么将这些项目存储在一个数组中可以帮助你这样做:

NSMutableArray *sealArray;
for(id item in [self children])     
     if([item isKindOfClass:[Seal class])
         [sealArray addObject:(Seal *)item];//This will hold only seals and you can get the count by simply doing [sealArray count];