从CCSprite / CCSpriteFrame / CCSpriteBatchNode的一部分创建CCSprite

时间:2013-12-30 16:28:28

标签: objective-c cocos2d-iphone

可以从CCSpriteBatchNode中的CCSprite的一部分创建新的CCSprite吗?

很长一段时间以来,我一直使用SpriteFrameCache和BatchNode而没有100%理解这两者,特别是它们与textureCache的关系。我可以使用一些明确的建议来完成以下任务:

目前,我将纹理图集加载到CCSpriteBatchNode中,并将帧列表加载到CCSpriteFrameCache中,并生成一个精灵,我认为是基本的标准版本

CCSpriteBatchNode *batchNode = [CCSpriteBatchNode batchNodeWithFile:@"textureAtlasImage.png"];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"textureAtlasFrames.plist"];

CCSprite * gameObject = [CCSprite spriteWithSpriteFrameName:@"gameObject.png"];
[self addChild:batchNode];
[batchNodeaddChild:gameObject];

为了简单起见,我想做的是将游戏对象以编程方式划分为4个部分(而不是将原始图像分成四个部分,并将每个部分分别添加到textureAtlasImage.png中)。

从阅读开始,我想的是:

CCSpriteFrame * gameObjectFrame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"textureAtlasFrames.plist"];
CCTexture2D * gameObjectIndividualTexture = [[gameObjectFrame] texture];
CCSpriteFrame * gameObjectPartFrame = [CCSpriteFrame frameWithTexture:gameObjectIndividualTexture offset: rectInPixels: ] ;
[[CCSpriteFrameCache sharedSpriteFrameCache]  addSpriteFrame:gameObjectPartFrame name:@"gameObjectPart1"];

但我的问题是: 这已经在batchNode中吗?如果没有,我如何使用batchNodes从gameObjectPart1中实际创建精灵? 将另一个精灵帧添加到缓存中以便在其他地方复制数据是否浪费?

1 个答案:

答案 0 :(得分:1)

创建精灵后,您应该可以调整纹理矩形。使用相同的精灵框架创建四个精灵,然后将每个精灵的纹理矩形设置为您希望它们使用的4个较小区域之一。

使用sprite.textureRect属性获取原始大小的CGRect并分别更改大小的原点。例如,左下方的矩形可以通过将textureRect设置为相同的rect来创建,但size.width和size.height减半。

相关问题