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

将您的 sprite 打包到 spritesheet 中,然后使用 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 并处理 Sprite 帧是一个好主意。

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