1

CCSpriteBatchNodeとCCSpriteFrameCacheを使用してSpriteSheetsを介して全身をアニメーション化しています。これで、ユーザーは自分の写真をそのボディに追加できるようになりました。スプライトシートにaddChildを追加しようとすると、 「CCSprite は同じテクスチャ ID を使用していません」というエラーでクラッシュします。

CCSpriteがそのキャッシュ/テクスチャ ( texturepackerによって作成されたもの) になく、クラッシュは正常だったことがわかりましたが、ユーザーの操作を通じてその体に顔を追加する必要があるため、これに対する回避策があるかどうかを知りたいと思いましたその体をアニメートします。そして、スプライトシートを使用することは、アニメーションに最適なオプションです. 誰でも??

4

3 に答える 3

2

この場合にできることは、ユーザーの写真を撮り、ユーザーの画像からテクスチャを作成することです。次に、そのテクスチャを CCTextureCache に追加します。これで、ユーザー画像のテクスチャができました。これで、そのテクスチャをアニメーションで使用できます。

スプライトからテクスチャを作る(ユーザー画像からスプライトが作れます)

CCSprite *spr = nil;//your sprite
CCRenderTexture* renderTexture = [CCRenderTexture renderTextureWithWidth:spr.contentSize.width height:spr.contentSize.height];

spr.anchorPoint = ccp(0, 0);
spr.position = ccp(0, 0);
[renderTexture addChild:spr];  

[renderTexture begin];     
[spr draw]; // or [spr visit];
[renderTexture end];

CCTexture2D *result = renderTexture.sprite.texture;

そのテクスチャをテクスチャ キャッシュに追加します。

[[CCTextureCache sharedTextureCache] addTexture]

于 2013-07-18T10:12:11.067 に答える
0

SpriteSheetsCCSpriteに手動で追加することはできません。texturepackerを使用してアニメーション化されたスプライトを作成する場合、それもファイルで作成され、そのサイズで画像が読み込まれることを知っていることを願っています。.plist

手動で CCSprite を追加すると、SpriteFramesWithFile. エラーが発生している可能性があります。

texturepackerを使用せずにアニメーション CCSprite を追加する別の方法

CCSprite *dog = [CCSprite spriteWithFile:@"dog1.gif"];
        dog.position = ccp(winSize.width/2, winSize.height/2);
        [self addChild:dog z:2];

        NSMutableArray *animFrames = [NSMutableArray array];
        for( int i=1;i<=5;i++)
        {
            NSString* file = [NSString stringWithFormat:@"dog%d.gif", i];
            CCTexture2D* texture = [[CCTextureCache sharedTextureCache] addImage:file];
            CGSize texSize = texture.contentSize;
            CGRect texRect = CGRectMake(0, 0, texSize.width, texSize.height);
            CCSpriteFrame* frame = [CCSpriteFrame frameWithTexture:texture rect:texRect];
            [animFrames addObject:frame];
        }
        CCAnimation * animation = [CCAnimation animationWithSpriteFrames:animFrames];
        animation.delayPerUnit = 0.07f;
        animation.restoreOriginalFrame = YES;

        CCAnimate *animAction  = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:animation]];
        [dog runAction:animAction];

上記のコードは、テクスチャパッカーCCSpriteを使用せず にアニメーションを追加する方法を説明しているだけです

ここで画像の配列を変更することもできるので、手動で画像を追加することもできます。

于 2013-07-18T09:36:34.990 に答える
0

を作成するCCSpriteBatchNodeと、単一の にリンクされtextureます。これが a のポイントですCCSpriteBatchNode: 同じテクスチャを使用する異なるスプライトを描画して、OpenGL の描画呼び出しを減らし、効率を高めます。

最も簡単な回避策 (パフォーマンスが重要なポイントに達していない場合) はCCLayerCCSpriteBatchNode.

CCSprites同じ に別のもの(たとえば、キャラクターの体、手足、頭)を追加したい場合はCCSpriteBatchNode、必要なすべての体の部分を含む単一のスプライト シート (またはテクスチャ パック) を作成する必要があります。に追加しCCSpriteBatchNodeます。この単一のスプライト シートは、 が使用する唯一のものにCCSpriteBatchNodeなります。CCSpritesこのスプライト シートを使用していないものは追加できません。

于 2013-07-18T09:46:37.427 に答える