web-dev-qa-db-ja.com

CCSpriteの画像の変更

SpriteWithFileを使用していくつかのCCSpritesを作成しました。

ランタイム中にスプライトの画像を変更するにはどうすればよいですか?

いくつかのスプライト画像を定期的に変更する必要があります。

33
user773578
CCTexture *tex = [CCTexture textureWithFile:fileName];
self.texture = tex;
59
Van Do

SpriteSheetsを使用している場合、これは機能します。

NSString* newSprite = [NSString stringWithString:@"Sprite_NAME.png"];
CCSpriteFrameCache* cache = [CCSpriteFrameCache sharedSpriteFrameCache];
[Sprite setDisplayFrame:[cache spriteFrameByName:newSprite]];
14
Clev3r
[yourSprite setTexture:[[CCSprite spriteWithFile:@"yourImage.png"]texture]];
9
Zeeshan

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));
4
Singhak

Cocos2d-iPhone v 3.0.0以降をお使いの方

demonSprite.texture = [[CCSprite spriteWithImageNamed:@"steelDemonNormal.png"] texture];
1
Sauvik Dolui

私は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") );
1
mostafa88

このように、実行時にCCSpriteのテクスチャを変更する必要があるだけです。

[aSprite setTexture:[[CCTextureCache sharedTextureCache] addImage:@"NewImage.png"]];
0
theAmitom

このような方法で1つのcctexture2dオブジェクトを作成する必要があります

CCTexture2D * newtexture = [[CCTextureCache sharedTextureCache] addImage:@ "new-texture"]; [mainSprite setTexture:newtexture];

これは、スプライトイメージテクスチャのランタイムを変更する場合に必要なことのすべてです。

0
Shauket Sheikh

多くのインスタンスで同じスプライトを使用しているため、ゲームにアトラステクスチャを使用してみてください

使用する

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テクスチャアトラスを作成します

お役に立てれば

幸運を

0
Kumar C

spriteSheetsを使用している場合、これは機能します

CCSpriteBatchNode *batch;
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFrameWithFile:@"file.plist"];

batch = [[[CCSpriteBatchNode alloc] initWithFile:@"file.png"] capacity:50] autorelease];

[self addChild:batch];
0
Gaurav

画像を継続的に変更する場合は、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];

0
Ali Raza