4

cocos2d-xで、スプライトが使用するpngを変更するにはどうすればよいですか?

次の作品は動作しますが、少し時間がかかるようで、電話をかけなくても済むような代替手段があるかどうか疑問に思いましたnew

// create sprite with original png
m_pSpr = CCSprite::create( "1.png" );
m_pSpr->setPosition( ccp( 100, 100 ) );
this->addChild( m_pSpr );

// now change the png that is used by the sprite

// new image from png file
CCImage* img = new CCImage();
img->initWithImageFile( "2.png", CCImage::kFmtPng );

// new texture from image
CCTexture2D* tex = new CCTexture2D();
tex->initWithImage( img );

// finally change texture of sprite
m_pSpr->setTexture( tex );
4

3 に答える 3

5

スプライトをスプライトシートにパックしてから、CCSpriteのsetDisplayFrame()を使用します。

// make sure the spritesheet is cached
auto cacher = CCSpriteFrameCache::sharedSpriteFrameCache();
cacher->addSpriteFramesWithFile("Spritesheet.plist");

// create the sprite
m_pSpr = CCSprite::create( "1.png" );

// set it's display frame to 2.png      
CCSpriteFrame* frame = cacher->spriteFrameByName("2.png");
if( frame)
    m_pSpr->setDisplayFrame(frame);
于 2012-10-14T20:41:31.803 に答える
2

単一のスプライトにはsetTextureメソッドを使用しないでください。スプライトをアトラスにパックする場合(たとえば、単一のテクスチャ、内部に多くの異なるフレームがある2048x2048ピクセル、メモリの消費量を減らすことができます)、このメソッドはスプライトに巨大なテクスチャ全体を設定します。代わりにsetDisplayFrameを使用してください

于 2012-10-14T09:10:44.823 に答える
1

可能ですが、Morionが言ったことは正しいです。高価なので、以下のコードの使用は避けてください。TexturePackerを使用して、スプライトフレームを処理することをお勧めします。

yourSprite->setTexture(CCTextureCache::sharedTextureCache()->addImage("2.png"));
于 2012-10-14T12:49:18.670 に答える