此为部分代码,仅为防止遗忘:
/* 加载图片资源到SpriteFrame缓存池*/
CCSpriteFrameCache *cache=CCSpriteFrameCache::sharedSpriteFrameCache();
cache->addSpriteFramesWithFile("ghosts.plist", "ghosts.png");
/* 创建CCTexture2D对象*/
CCTexture2D *texturee=CCTextureCache::sharedTextureCache()->textureForKey("ghosts.png");
/* 使用CCTexture2D对象创建BatchNode */
CCSpriteBatchNode *batchnode=CCSpriteBatchNode::createWithTexture(texturee, 10);
/* 添加BatchNode到场景*/
this->addChild(batchnode,1);
/* 批量创建精灵,并把精灵加入batchnode */
batchnode->setPosition(ccp(size.width/3,size.height/3));
for (int i=0; i<10; i++) {
int x=CCRANDOM_0_1()*320;
int y=CCRANDOM_0_1()*32;
CCSprite *spritte=CCSprite::createWithSpriteFrameName("father.gif");
spritte->setPosition(ccp(x,y));
batchnode->addChild(spritte);
}
//从缓存总读取图片,图片是在ghosts.png中集成的
CCMenuItemImage *closed=CCMenuItemImage::create();
closed->setNormalSpriteFrame(cache->spriteFrameByName("sister1.gif"));
closed->setSelectedSpriteFrame(cache->spriteFrameByName("sister2.gif"));
closed->initWithTarget(this, menu_selector(HelloWorld::menuCloseCallback));
closed->setPosition(ccp(size.width/5,size.height/5));
//this->addChild(closed);
CCMenu *menus=CCMenu::create(closed,NULL);
this->addChild(menus);
过程如下:
->创建用TexturePacker打包图片
->用图片创建Texture2D对象
->用Texture2D对象创建SpriteBatchNode对象并添加到场景
->然后创建精灵的时候把精灵添加到SpriteBatchNode里而不是添加到场景里。
另外,
下面是两种比较常用的初始化精灵的方式:
CCSprite sprite = CCSprite::spriteWithFile("hero.png");
/** 或者 **/
CCTexture2D* cache = CCTextureCache::sharedTextureCache()->addImage("hero.png");
CCSprite* sprite = CCSprite::spriteWithTexture(cache);
在onexit中,可以通过:
CCTextureCache::sharedTextureCache()->removeUnusedTextures();
来释放没有用过的缓存