非常简单的问题。我在Objective C(cocos2d)中工作,我试图计算某个类的精灵的数量在当前显示的图层上。例如,我有一个名为Seal
的类,它是CCNode
的子类,在我当前的层中,我想要计算有多少类型为Seal
的实例。
我知道如何通过
来计算图层的子项数int numberChildren = [[self children] count];
正确返回图层上的子项数。但我只想要在我的图层上Seal
的数量。我怎么能这样做?谢谢=)
答案 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];