0

对于一个简单的游戏,我有 4 个不同的平台(都在一个 spritesheet 上)。我最初将每个添加 5 个到 CCSpriteBatchNode,并将它们全部设置为不可见。当我设置我的平台时,我想从我的 CCSpriteBatchNode 中获取一个特定类型的平台并更改它以使其可见并定位它。

我无法找到不可见的特定类型的平台。或相反亦然?

我知道你可以使用 [batchnode getchildbytag:tag] 但据我所知,它只返回一个精灵。有什么方法可以将指向特定类型的每个平台的指针放入数组中,以便我可以遍历数组并找到所有不可见的精灵?

谢谢!

4

2 回答 2

1

正如 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,每种平台类型一个,并将指向适当类型的精灵的指针存储在该数组中。

于 2012-12-15T12:11:14.007 回答
0

没有一种超级简单的方法可以做到这一点。您需要遍历孩子并单独检查每个孩子。

为了编码效率,请考虑向 CCSpriteBatchNode 添加一个类别来为您执行此功能。这样您就可以根据需要轻松复制它。

于 2012-12-15T07:45:59.383 回答