batchNode は単なるテクスチャ描画アーティファクトです...テクスチャに含まれるフレームについても、単一のテクスチャに複数の「論理」ファイルが埋め込まれているかどうかについてもまったくわかりません。通常、spriteFrame を spriteFrameCache に追加して、その関連付けを作成する必要があります。各 spriteFrame は、batchNode の「フラグメント」に関するメタデータを提供します。これは私のゲームの1つの例です:
-(void) setupIdleAnimation{
[self setupAnimations];
NSString* animationName = @"Idle";
NSString* framesFileName = [self getPlistFileNameForAction:animationName];
CCSpriteBatchNode *bn = [CCSpriteBatchNode batchNodeWithFile:[self getTextureFileNameForAction:animationName]];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:framesFileName texture:bn.texture];
// create array of frames for the animation
self.idleBatchNode=bn;
NSMutableArray *animFrames = [NSMutableArray array];
for(NSUInteger i = 1; i <= 8; ++i) {
NSString *sfn = [self getFrameNameForAnimation:animationName
andFrameNumber:i];
CCSpriteFrame *sf = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:sfn];
if(sf) {
[animFrames insertObject:sf atIndex:i-1];
} else {
CCLOGERROR(@"%@<setupIdleAnimation> : *** Sprite frame named [%@] not found in cache, bailing out.",self.class,sfn);
return;
}
}
CCAnimation *anim=[CCAnimation animationWithFrames:walkAnimFrames delay:ANIM_FRAME_DELAY];
[animFrames removeAllObjects];
anim.name=animationName;
self.idleAction = [CCRepeatForever
actionWithAction:[CCAnimate actionWithAnimation:anim
restoreOriginalFrame:NO]] ;
self.idleSprite = [CCSprite spriteWithSpriteFrameName:[self getFrameNameForAnimation:animationName
andFrameNumber:1]];
self.idleSprite.visible=NO;
[self.idleBatchNode addChild:self.idleSprite];
}
そこで、各フレームがテクスチャ内のどこにあるかを示すデータを .plist に用意し、これらの定義をフレーム キャッシュに追加します。言うまでもなく、batchNode は、レンダリング パフォーマンスを最適化するコンテナーです。上記の例では、テクスチャが 16 のキャラクター クラスのアイドル スプライトを埋め込んでいることがよくあります。
このチュートリアルで良い紹介を見つけることができます。