1

有没有一种干净有效的方法来创建任意数量的相同 CCSprite?

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

例如,在我的游戏中,我在 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];
}
4

2 回答 2

4

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

- (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;
    }
}
于 2012-11-09T19:20:34.177 回答
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;
    }
}

干杯!

于 2012-11-09T18:32:24.307 回答