正如 Drama 所建议的那样,您别无选择,只能“迭代”孩子。至于识别哪个精灵对应哪个平台,有几种方法。一个简单的方法是使用精灵的“标签”属性——假设您不将它用于任何其他目的。
// some constants
static int _tagForIcyPlatform = 101;
static int _tagForRedHotPlatform = 102;
... etc
// where you create the platforms
CCSptiteBatchNode *platforms= [CCSpriteBatchNode batchNodeWithFile:@"mapItems_playObjects.pvr.gz"];
CCSprite *sp = [CCSprite striteWithSpriteFrameName:@"platform_icy.png"];
sp.tag = _tagForIcyPlatform;
[platforms addChild:sp];
sp = [CCSprite striteWithSpriteFrameName:@"platform_redHot.png"];
sp.tag = _tagForRedNotPlatform;
[platforms addChild:sp];
// ... etc
// where you want to change properties of
-(void) setVisibilityOf:(int) aPlatformTag to:(BOOL) aVisibility {
for (CCNode *child in platforms.children) {
if (child.tag != aPlatformTag) continue;
child.visible = aVisibility;
}
}
再一次,如果您没有将平台的子标签用于其他目的,则此方法有效。如果您出于其他目的需要标签,请考虑在类中使用 NSMutableArray,每种平台类型一个,并将指向适当类型的精灵的指针存储在该数组中。