可以从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中实际创建精灵? 将另一个精灵帧添加到缓存中以便在其他地方复制数据是否浪费?
答案 0 :(得分:1)
创建精灵后,您应该可以调整纹理矩形。使用相同的精灵框架创建四个精灵,然后将每个精灵的纹理矩形设置为您希望它们使用的4个较小区域之一。
使用sprite.textureRect
属性获取原始大小的CGRect并分别更改大小的原点。例如,左下方的矩形可以通过将textureRect设置为相同的rect来创建,但size.width和size.height减半。