创建多个相同的CCSprites

时间:2012-11-09 18:29:56

标签: iphone objective-c cocos2d-iphone ccsprite

是否有一种干净有效的方法来创建任意数量的相同CCSprites?

我真的只需要一个标记来引用它们以便以后删除。

例如在我的游戏中,我正在显示HUD中的生命数量:

- (void)displayOneLife
{
    CGPoint positionOne = ccp(90, 450);

    CCSprite *life1 = [CCSprite spriteWithFile:@"life.png"];
    [life1 setPosition:positionOne];
    [life1 setScale:0.5f];
    [self addChild:life1 z:5 tag:1];
}

- (void)displayTwoLives
{
    CGPoint positionOne = ccp(90, 450);
    CGPoint positionTwo = ccp(105, 450);

    CCSprite *life1 = [CCSprite spriteWithFile:@"life.png"];
    CCSprite *life2 = [CCSprite spriteWithFile:@"life.png"];

    [life1 setScale:0.5f];
    [life2 setScale:0.5f];

    [life1 setPosition:positionOne];
    [life2 setPosition:positionTwo];

    [self addChild:life1 z:5 tag:1];
    [self addChild:life2 z:5 tag:2];
}

- (void)displayThreeLives
{
    CGPoint positionOne = ccp(90, 450);
    CGPoint positionTwo = ccp(105, 450);
    CGPoint positionThree = ccp(120, 450);

    CCSprite *life1 = [CCSprite spriteWithFile:@"life.png"];
    CCSprite *life2 = [CCSprite spriteWithFile:@"life.png"];
    CCSprite *life3 = [CCSprite spriteWithFile:@"life.png"];

    [life1 setPosition:positionOne];
    [life2 setPosition:positionTwo];
    [life3 setPosition:positionThree];

    [life1 setScale:0.5f];
    [life2 setScale:0.5f];
    [life3 setScale:0.5f];

    [self addChild:life1 z:5 tag:1];
    [self addChild:life2 z:5 tag:2];
    [self addChild:life3 z:5 tag:3];
}

2 个答案:

答案 0 :(得分:4)

实际上,CCSprite构造函数在cocos的纹理缓存中查找,如果缓存已包含纹理,则il重用其纹理。所以你可以通过删除*纹理(我认为这里泄露了)来进一步简化,只需使用这样做:

- (void)displayLifes:(int) nrOfLifes
{
    CGPoint position = ccp(90, 450);    

    for(int i = 1 ; i <= nrOfLifes ; i++)
    {
        CCSprite *life = [CCSprite spriteWithFile:@"life.png"];
        [life setPosition:position];
        [life setScale:0.5f];
        [self addChild:life z:5 tag:i];
         position.x += 15;
    }
}

答案 1 :(得分:2)

使用您的图像创建CCTexture2D,然后使用该纹理初始化所有精灵。 这样您只需加载一次图像。

希望这有帮助。

编辑:

此外,您可以动态添加它们。像这样:

- (void)displayLifes:(int) nrOfLifes
{
    CGPoint position = ccp(90, 450);
    CCTexture2D *texture = [[[CCTexture2D alloc] initWithImage:[UIImage imageNamed:@"life.png"]]autorelease];

    for(int i = 1 ; i <= nrOfLifes ; i++)
    {
         CCSprite *life = [CCSprite spriteWithTexture:texture];
         [life setPosition:position];
         [life setScale:0.5f];
         [self addChild:life z:5 tag:i];

         position.x += 15;
    }
}

干杯!