SpriteWithFileを使用していくつかのCCSpritesを作成しました。
ランタイム中にスプライトの画像を変更するにはどうすればよいですか?
いくつかのスプライト画像を定期的に変更する必要があります。
CCTexture *tex = [CCTexture textureWithFile:fileName];
self.texture = tex;
SpriteSheetsを使用している場合、これは機能します。
NSString* newSprite = [NSString stringWithString:@"Sprite_NAME.png"];
CCSpriteFrameCache* cache = [CCSpriteFrameCache sharedSpriteFrameCache];
[Sprite setDisplayFrame:[cache spriteFrameByName:newSprite]];
[yourSprite setTexture:[[CCSprite spriteWithFile:@"yourImage.png"]texture]];
COCOS2D-Xでは、次の方法でこれを行うことができます
CCTexture2D *tex = CCTextureCache::sharedTextureCache()->addImage("xyz.png");
sprit_name->setTexture(tex);
スプライトのサイズを変更してから、この行も書き込む場合
sprit_name->setTextureRect(CCRectMake(0,0, tex->getContentSize().width, tex->getContentSize().height));
Cocos2d-iPhone v 3.0.0以降をお使いの方
demonSprite.texture = [[CCSprite spriteWithImageNamed:@"steelDemonNormal.png"] texture];
私はcocos2D-xをc ++でコーディングします。単一のファイルを使用する代わりにspriteSheetを使用する場合は、この方法を使用する必要があります。 spriteSheetをメインレイヤーに追加するとします。
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("Sprite_sheet.plist");
_gameBatchNode = CCSpriteBatchNode::create("Sprite_sheet.png", 200);
this->addChild(_gameBatchNode, kMiddleground);
kMiddlegroundは、定義された整数です。
次に、「cloud.png」という名前のスプライトがすでにあるスプライトの画像を変更したいのですが、次のコードを使用して行います。
cloud->setDisplayFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("blackCloud.png") );
このように、実行時にCCSpriteのテクスチャを変更する必要があるだけです。
[aSprite setTexture:[[CCTextureCache sharedTextureCache] addImage:@"NewImage.png"]];
このような方法で1つのcctexture2dオブジェクトを作成する必要があります
CCTexture2D * newtexture = [[CCTextureCache sharedTextureCache] addImage:@ "new-texture"]; [mainSprite setTexture:newtexture];
これは、スプライトイメージテクスチャのランタイムを変更する場合に必要なことのすべてです。
多くのインスタンスで同じスプライトを使用しているため、ゲームにアトラステクスチャを使用してみてください
使用する
CCSpriteFrameCache、CCSpriteBatchNode
したがって、1つのテクスチャにアトラス化されたさらに多くの異なるテクスチャを使用して、テクスチャキャッシュを最適化できます。そして、すべてが単一のノードにまとめられます。これにより、描画呼び出しの数も減り、フレームレートが向上します。
使ってみてください
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"Characters.plist"];
CCSpriteBatchNode* batch = [CCSpriteBatchNode batchNodeWithFile:@"Characters.png" capacity:10];
[self addChild:batch];
CCSprite* player1 = [CCSprite spriteWithSpriteFrameName:@"Luce.png"];
player1.position = ccp(winSize.width * 0.2, winSize.height * 0.8);
[batch addChild:player1];
そして使う
CCSprite* player = nil;
CCARRAY_FOREACH(batch.children, player1) {
// some computational code and condition
if (sonecondition) {
[player1 setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"spriteframename.png"]];
}
}
更新中またはコードの他の部分
Zwoptex を使用します
TexturePacker 2Dテクスチャアトラスを作成します
お役に立てれば
幸運を
spriteSheetsを使用している場合、これは機能します
CCSpriteBatchNode *batch;
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFrameWithFile:@"file.plist"];
batch = [[[CCSpriteBatchNode alloc] initWithFile:@"file.png"] capacity:50] autorelease];
[self addChild:batch];
画像を継続的に変更する場合は、initメソッドに次のコードを記述します
CCTexture2D *tex1 = [[CCTextureCache sharedTextureCache] addImage:@"image1.png"]; CCTexture2D *tex2 = [[CCTextureCache sharedTextureCache] addImage:@"image2.png"]; CCTexture2D *tex3 = [[CCTextureCache sharedTextureCache] addImage:@"image3.png"]; CCSprite *Sprite = [CCSprite spriteWithTexture:tex1]; //Make above variables as class level to access in whole class [self addChild:Sprite]; //position the Sprite according to your need
画像を変更したい場所にこの行を書きます
[Sprite setTexture:tex3];