一、截图保存功能的实现
使用CCRenderTexture渲染纹理,从而添加到场景,同样可以把渲染的纹理保存为png或jpg格式;
截图功能实现:
void CTestLayer::menuCloseCallback(CCObject* pSender)
{
}
void CTestLayer::SaveScreenShot()
{
}
附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/
二、CCArray
1、CCArray类似于Apple的NSMutableArray,但要比其好用,不过还是不如C++的STL库;
API:
2、这里要说一下remove和fastremove:
- //普通删除
- void
ccArrayRemoveObjectAtInd intex(ccArray *arr, unsigned index, boolbReleaSEObj ) - {
-
CCAssert(arr && arr->num > 0 && 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], sizeof(CCObject*));remaining * -
} - }
如果有array={0,2,3,4,5},如果要删除3,使用普通删除得到的结果{0,5},使用快速删除得到的结果是{0,5,4}。可以看出快速删除的效率比普通删除效率高,就差在移动元素的时间复杂度上。
使用了覆盖的技术,将旧数据进行覆盖,不能保证原来顺序的不变;
3.内存分配
- CCArray在插入数据时检测到空间不足会增加一倍的空间,直到满足分配;
- 两个CCArray判等的条件是它中的每个元素相等即可,不考虑它们空间的大小;
- 由于CCArray使用的是C接口,它不会有Objective-C消息的开销;
- 它不进行边界溢出、空间需求等安全检查上;
- 使用CCArray时要进行retain,析构时要进行release;