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

Objective c 从CCSprite/CCSpriteFrame/CCSpriteBatchNode的一部分创建CCSprite,objective-c,cocos2d-iphone,Objective C,Cocos2d Iphone,能否从CCSpriteBatchNode中的CCSprite的一部分创建新的CCSprite 很长一段时间以来,我一直在使用SpriteFrameCache和BatchNode,但对这两个方面没有100%的了解,特别是它们与textureCache的关系。我可以使用一些明确的建议来实现以下目标: 目前,我将纹理图集加载到CCSpriteBatchNode中,将帧列表加载到CCSpriteFrameCache中,并以我认为是基本标准的方式生成一个精灵 CCSpriteBatchNode *batc

能否从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];
为了简单起见,我想做的是通过编程将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中创建精灵?
将另一个spriteframe添加到缓存以在其他地方复制数据是否浪费?

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


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

谢谢steffen,我会尝试。当添加到“精灵批处理”节点时,我是只需要在调整纹理之前添加一个版本的精灵,还是在调整之后添加每个版本的精灵?您将需要4个精灵。如果上述操作不起作用(不确定批处理节点使用的是纹理竖立还是精灵框架),您可以创建自定义精灵框架并调整其矩形。您不需要缓存这些帧,因为它们将由使用帧的精灵保留。