加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cocos2d-x::截图保存、CCArray

发布时间:2020-12-14 21:21:30 所属栏目:百科 来源:网络整理
导读:一、截图保存功能的实现 使用CCRenderTexture渲染纹理,从而添加到场景,同样可以把渲染的纹理保存为png或jpg格式; 截图功能实现: void CTestLayer::menuCloseCallback(CCObject* pSender) { SaveScreenShot(); } void CTestLayer::SaveScreenShot() { CCS
一、截图保存功能的实现

使用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:
http://cn.cocos2d-x.org/tutorial/show?id=554

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读