更改精灵使用的png

时间:2012-10-14 02:09:47

标签: cocos2d-iphone cocos2d-x

在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 );

3 个答案:

答案 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"));