在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 );
答案 0 :(得分:5)
将精灵打包到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);
答案 1 :(得分:2)
您不应该对单个精灵使用setTexture方法。如果你将精灵打包到地图集(单个纹理,例如,2048x2048像素,里面有许多不同的帧,这样可以减少内存),这个方法将为你的精灵设置整个巨大的纹理。请改用setDisplayFrame
答案 2 :(得分:1)
你可以,但Morion所说的是正确的,尽量避免使用下面的代码,因为它很昂贵。尝试使用TexturePacker并处理Sprite帧是一个好主意。
yourSprite->setTexture(CCTextureCache::sharedTextureCache()->addImage("2.png"));