6

を使用して初期化される CCSprite があります[CCSprite spriteWithSpriteFrameName:@"plist_file_key_here.png"]。すべてのスプライトを plist ファイルから CCSpriteFrameCache に追加しました。私はこのようにテクスチャを設定しようとしました:

CCSpriteFrame * frame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:name];
NSAssert(frame.texture!=nil, @"frame.texture can't equal nil"); //this works fine
[sprite setTexture:frame.texture]; //doesn't cause a white square to appear, just doesn't switch the image.

コメントで述べたように、これは機能しません。テクスチャ アトラスから CCSpriteFrameCache にロードされたスプライト フレームに依存する[CCSprite spriteWithFile:]との使用の違いに関係があると思います。[CCSprite spriteWithSpriteFrameName:]テクスチャ アトラスから読み込まれたスプライトを使用する場合、各スプライトのテクスチャはスプライト シートのテクスチャと等しくなります。これを回避する方法はありますか、それともスプライトを削除して再作成する必要がありますか? それが私の唯一の選択肢である場合、ccnode をその親から削除し、その子を保持する方法はありますか?

4

3 に答える 3

17

救助するためのAPIリファレンス!

スプライトフレームのあるテクスチャがある場合、テクスチャを変更するのではなく、スプライトが使用するスプライトフレームを変更します。次のように実行できます。

CCSpriteFrameCache* cache = [CCSpriteFrameCache sharedSpriteFrameCache];
CCSpriteFrame* frame = [cache spriteFrameByName:name];
sprite.displayFrame = frame;

cocos2d v3では、次のようにする必要があります。

sprite.spriteFrame = frame;
于 2011-11-19T00:02:13.423 に答える
0

mySprite という名前の CCSprite オブジェクトについて考えてみましょう。これで、スプライトの画像を次のように変更できます。

[mySprite setTexture:[[CCTextureCache sharedTextureCache] addImage:[Tools imageNameForName:"myNewImage.png"]]];

これにより、CCSprite オブジェクト mySprite の画像が myNewImage.png に変更されます。

注 : 変更する画像がアセットの特定のフォルダーにある場合は、画像のパス全体を使用してその画像を評価できます。

于 2016-05-09T09:53:48.133 に答える