0

CCSpriteBatchNodeが明示的に使用されないのはなぜCCAnimationですか? 代わりに、以下を使用します: (各画像を batchNode に追加して、batchNode にそれらの画像を印刷させる代わりに、コードは のみを使用しますspriteFrameByName):

CCSpriteBatchNode *chapter2SpriteBatchNode = [CCSpriteBatchNode batchNodeWithFile:@"scene1atlas.png"];
CCSprite *vikingSprite = [CCSprite spriteWithSpriteFrameName:@"sv_anim_1.png"];
[chapter2SpriteBatchNode addChild:vikingSprite];


// Animation example with a CCSpriteBatchNode
CCAnimation *exampleAnim = [CCAnimation animation];
    [exampleAnim addFrame:
    [[CCSpriteFrameCache sharedSpriteFrameCache] 
    spriteFrameByName:@"sv_anim_2.png"]];

ご回答有難うございます

4

1 に答える 1

0

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 のキャラクター クラスのアイドル スプライトを埋め込んでいることがよくあります。

このチュートリアルで良い紹介を見つけることができます。

于 2012-04-17T22:28:05.987 に答える