关闭

使用cocos2d-x把TP合成的大图分解成原来的小图

951人阅读 评论(0) 收藏 举报
一、思路
   1、cocos2d-x中很容易从给定的plist图片中获取小图纹理创建CCSprite
   2、把CCSprite的纹理绘制到CCRenderTexture上
   3、利用CCRenderTexture获取CCImage
   4、保存CCImage到图片文件
二、实现代码
      
      void SavePngFromPlist(char *plistName);函数的实现
      //从给定的plist文件中获取所有图片的名称
      CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile(plistName);
      std::string fullPath = CCFileUtils::sharedFileUtils()->fullPathForFilename(plistName);
      CCDictionary *dict = CCDictionary::createWithContentsOfFileThreadSafe(fullPath.c_str());
      CCDictionary *frameDict = (CCDictionary*)dict->objectForKey("frames" );
      CCArray *allKeyArray = frameDict->allKeys();  
     //
      CCObject *obj = NULL;
      CCARRAY_FOREACH(allKeyArray,obj){
            CCString *tempName = (CCString*)obj;
             //创建sprite
            CCSprite *sprite = CCSprite::createWithSpriteFrameName(tempName->getCString());
            CCImage *image = SpirtetoImame(sprite);//从CCSprite中提取image
            image->saveToFile(tempName->getCString(), false);//把image保存到文件
      }
     
      CCImage * SpirtetoImame(CCSprite *sprite);//函数实现如下
      CCPoint p = sprite->getAnchorPoint();
      sprite->setAnchorPoint(ccp(0,0));
      CCRenderTexture *render = CCRenderTexture::create(sprite->getContentSize().width,sprite->getContentSize().height);
      render->begin();
      sprite->visit();
      render->end();
      sprite->setAnchorPoint(p);
      CCImage *pImage = render->newCCImage( true);
       return pImage;

     以上代码全部使用的是cocos2d-x的API,使用时只需要把要分解的plist和相应的大图放到资源目录,在程序中调用
     SavePngFromPlist(char *plistName)就可以了。

3、改进1
   上面的程序可以很方便的分解TP合成的大图,但是不便于使用。可以所以用配置文件的方式提供需要分解的Plist文件的文件名。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4720次
    • 积分:113
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:1篇
    • 译文:0篇
    • 评论:9条
    文章分类
    最新评论