是否有一种干净有效的方法来创建任意数量的相同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];
}
答案 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;
}
}
干杯!