TexturePacker打包成的 plist文件的使用

TexturePacker 它是一款把若干资源图片拼接为一张大图的工具。
我们知道openGL载入纹理图片的时候,所用内存是会自动扩张到2的n次方的。
所以我们需要把很多小图拼接到一张大图里,
然后到代码中取其所需。
这样,浪费掉的空间就很小了。
还有就是,提前一次载入,减少I/O,提高速度。
综上:
节省内存,提高效率。
生成的XX.plist文件,XX.png图片一张。
如何获取XX.png这张图片上的小图片呢?
很简单,知道小图片的Name就行。

我们可以根据plist文件获取单个CCSprite,把他添加到CCLayer上。

方法如下:
CCSprite* HelloWorld::addSp(const char*ImageName)
{
 CCSpriteFrameCache *cache = CCSpriteFrameCache::sharedSpriteFrameCache();
 cache->addSpriteFramesWithFile("TankUIp.plist", "TankUIp.png");
 CCString::createWithFormat(ImageName)->getCString();
 CCSpriteFrame*frame =  cache->spriteFrameByName(ImageName);
 CCSprite*sp = CCSprite::createWithSpriteFrame(frame);

 return sp;
}


bool HelloWorld::init()

{
 
     CCSprite*sp = addSp("1P.png");
 
    sp->setPosition(ccp(200,400));
 
    this->addChild(sp);

 
   return true;
}

还可以通过plist文件保存的序列帧创建Animation

方法如下:

static void buildAnimateByPlist(CHAR* plistName, int beginFrame,int endFrame,CHAR* findpngName,CHAR* setAniName,bool B,double frameSpeed,cocos2d::CCObject * target,cocos2d::SEL_CallFuncO selector)
 {
  int nNameLength = strlen(plistName);
  char * pImageName = new char[nNameLength+5];
  strcpy(pImageName,plistName);
  strcat(pImageName,".png");

  char * pPlistName = new char[nNameLength+6];
  strcpy(pPlistName,plistName);
  strcat(pPlistName,".plist");

  CCSpriteFrameCache *frameCache = CCSpriteFrameCache::sharedSpriteFrameCache();
  frameCache->addSpriteFramesWithFile(pPlistName);

  CCArray* animFrames = CCArray::createWithCapacity(endFrame+1);
  char str[100] = {0};
  for(int i = beginFrame; i < endFrame+1; i++)
  {
   sprintf(str, findpngName,i);
   CCSpriteFrame *frame = frameCache->spriteFrameByName(str);
   animFrames->addObject(frame);
  }
  //设置动画名字
  CCAnimation *animation = CCAnimation::createWithSpriteFrames(animFrames, frameSpeed);
  //加入缓存
  CCAnimationCache::sharedAnimationCache()->addAnimation(animation, setAniName);

  //CCAnimationCache *animCache = CCAnimationCache::sharedAnimationCache();

  //CCAnimation *action = animCache->animationByName(setAniName);
  //return action;
  CCTextureCache::sharedTextureCache()->addImageAsync(pImageName,target,selector);

 }

static CCAnimation * getAnimationByName(CHAR* setAniName,bool isRestoreOrgin = true)
 {
  CCAnimationCache *animCache = CCAnimationCache::sharedAnimationCache();
  CCAnimation * animation = animCache->animationByName(setAniName);
  animation->setRestoreOriginalFrame(isRestoreOrgin);
  return animation;
 }

void HelloWorld::loadingProgress(cocos2d::CCObject * obj)
{

//在此处添加进度条Animation
 cocos2d::CCSprite * sp = cocos2d::CCSprite::create();
 sp->initWithFile("CloseNormal.png");
 sp->setPosition(ccp(100,200));
 this->addChild(sp);
}

bool HelloWorld::init()

{

   MyTools::buildAnimateByPlist("Animation",0,11,"EnemyBullet%02d.png","ebullet",false,0.12,this,callfuncO_selector(HelloWorld::loadingProgress));
    CCAnimation * pre_ani_atk =MyTools::getAnimationByName("ebullet");
    CCAnimate*actoinwq = CCAnimate::create(pre_ani_atk);
    CCSprite*m_Bullet = CCSprite::create("hedan.png",CCRect(0,0,30,70)); 

    m_Bullet->setPosition(ccp(200,200));
    this->addChild(m_Bullet);

    m_Bullet->runAction(actoinwq);
   return true;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值