Objective-C / Cocos2D重复代码减少

时间:2012-02-22 03:37:22

标签: objective-c ios xcode cocos2d-iphone reduction

任何人都知道如何减少我的以下代码行?我在objective-c / cocos2D上仍然相当新,我的下面的代码看起来像火车残骸。如果它是PHP,我可以轻松地创建一个循环来获取所有这些,但我只是不熟悉obj-c还没弄明白。

    dinosaur1_c = [CCSprite spriteWithSpriteFrameName:@"dinosaur1-c.png"];
    dinosaur2_c = [CCSprite spriteWithSpriteFrameName:@"dinosaur2-c.png"];
    dinosaur3_c = [CCSprite spriteWithSpriteFrameName:@"dinosaur3-c.png"];
    dinosaur4_c = [CCSprite spriteWithSpriteFrameName:@"dinosaur4-c.png"];
    dinosaur5_c = [CCSprite spriteWithSpriteFrameName:@"dinosaur5-c.png"];
    dinosaur6_c = [CCSprite spriteWithSpriteFrameName:@"dinosaur6-c.png"];
    dinosaur7_c = [CCSprite spriteWithSpriteFrameName:@"dinosaur7-c.png"];
    dinosaur8_c = [CCSprite spriteWithSpriteFrameName:@"dinosaur8-c.png"];
    dinosaur9_c = [CCSprite spriteWithSpriteFrameName:@"dinosaur9-c.png"];
    dinosaur10_c = [CCSprite spriteWithSpriteFrameName:@"dinosaur10-c.png"];
    dinosaur11_c = [CCSprite spriteWithSpriteFrameName:@"dinosaur11-c.png"];

    [sceneSpriteBatchNode addChild:dinosaur1_c];
    [sceneSpriteBatchNode addChild:dinosaur2_c];
    [sceneSpriteBatchNode addChild:dinosaur3_c];
    [sceneSpriteBatchNode addChild:dinosaur4_c];
    [sceneSpriteBatchNode addChild:dinosaur5_c];
    [sceneSpriteBatchNode addChild:dinosaur6_c];
    [sceneSpriteBatchNode addChild:dinosaur7_c];
    [sceneSpriteBatchNode addChild:dinosaur8_c];
    [sceneSpriteBatchNode addChild:dinosaur9_c];
    [sceneSpriteBatchNode addChild:dinosaur10_c];
    [sceneSpriteBatchNode addChild:dinosaur11_c];

非常感谢任何投入!

1 个答案:

答案 0 :(得分:4)

我建议使用NSMutableArray管理这些对象,如下所示:

NSMutableArray *sprites = [[NSMutableArray alloc] init];
for (int i = 1; i <= 11; i++) {
    id dino = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat:@"dinosaur%d-c.png",i]];
    [sprites addObject:dino];
    [sceneSpriteBatchNode addChild:dino];
}

// Since I don't know what your addChild: method does, the 'sprites' array exists to let you access the objects later, outside of the 'for' loop if desired...
// So where you would've used dinosaur4_c before, you would instead use [sprites objectAtIndex:4]
// This also demonstrates how to cast the return value from -objectAtIndex: to a CCSprite *
CCSprite *certainDino = (CCSprite *)[sprites objectAtIndex:4];

// Then, when done working with the sprites
[sprites release];