1

任意の数の同一の 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];
}
4

2 に答える 2

4

実際には、CCSprite コンストラクターは cocos のテクスチャ キャッシュを検索し、キャッシュに既にテクスチャが含まれている場合は、そのテクスチャを再利用します。したがって、 *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 に答える