Cocos2d-x::截图保存、CCArray

一、截图保存功能的实现

使用CCRenderTexture渲染纹理,从而添加到场景,同样可以把渲染的纹理保存为png或jpg格式;

截图功能实现:
void CTestLayer::menuCloseCallback(CCObject* pSender)
{
      SaveScreenShot();
}

void CTestLayer::SaveScreenShot()
{
      CCSize size = CCDirector::sharedDirector()->getWinSize()
      //使用尺寸初始化空的渲染纹理对象
      CCRenderTexture* texture = CCRenderTexture::create((int)size.width,(int)size.height);
      texture->setPosition(ccp(,));
      texture->begin();//开始获取
      //遍历场景节点对象,填充纹理
      CCDirector::sharedDirector()->getRunningScene()->visit();
      texture->end();//结束获取
      //保存,windows下在Win32/Debug目录下,iOS如下所示
      texture->saveToFile(“screenshot.png”,kCCImageFormatPNG);
}
附iOS下获取沙盒目录路径
CCFileUtils* u = CCFileUtils::sharedFileUtils();
CCLog("%s",u->getWritablePath().c_str());
目录如下所示:
/Users/dizi/Library/Developer/CoreSimulator/Devices/F2B95F6B-C5E8-43D6-A184-AB5F89189AE7/data/Containers/Data/Application/0169E75A-DC42-4E43-89DF-629EDAAC371F/Documents/

PS:生成精灵的两种方法

二、CCArray

1、CCArray类似于Apple的NSMutableArray,但要比其好用,不过还是不如C++的STL库;
API:

2、这里要说一下remove和fastremove:
  • //普通删除  
  • void ccArrayRemoveObjectAtIndex(ccArray *arr, unsigned int index, bool bReleaseObj 
  •  
  •     CCAssert(arr && arr->num && index arr->num, "Invalid index. Out of bounds");  
  •     //删除元素内容,位置仍保留着  
  •     if (bReleaseObj)  
  •      
  •         CC_SAFE_RELEASE(arr->arr[index]);  
  •      
  •     //长度减1  
  •     arr->num--;  
  •     //获得要删除的元素后的元素个数  
  •     unsigned int remaining arr->num index;  
  •     if(remaining>0)  
  •      
  •         //将要删除元素后的所有元素逐个向前移动  
  •         memmove((void *)&arr->arr[index], (void *)&arr->arr[index+1], remaining sizeof(CCObject*));  
  •      
  1. //快速删除  
  2. void ccArrayFastRemoveObjectAtIndex(ccArray *arr, unsigned int index)  
  3.  
  4.     //删除元素内容,位置仍保留着  
  5.     CC_SAFE_RELEASE(arr->arr[index]);  
  6.     //获取最后一个元素  
  7.     unsigned int last --arr->num;  
  8.     //把最后一个元素插到删除元素的位置上  
  9.     arr->arr[index] arr->arr[last];  
如果有array={0,1,2,3,4,5},如果要删除3,使用普通删除得到的结果{0,1,2,4,5},使用快速删除得到的结果是{0,1,2,5,4}。可以看出快速删除的效率比普通删除效率高,就差在移动元素的时间复杂度上。
使用了覆盖的技术,将旧数据进行覆盖,不能保证原来顺序的不变;

3.内存分配
  • CCArray在插入数据时检测到空间不足会增加一倍的空间,直到满足分配;
  • 两个CCArray判等的条件是它中的每个元素相等即可,不考虑它们空间的大小;
  • 由于CCArray使用的是C接口,它不会有Objective-C消息的开销;
  • 它不进行边界溢出、空间需求等安全检查上;
  • 使用CCArray时要进行retain,析构时要进行release;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值