一、截图保存功能的实现
使用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/
PS:生成精灵的两种方法
二、CCArray
1、CCArray类似于Apple的NSMutableArray,但要比其好用,不过还是不如C++的STL库;
API:
2、这里要说一下remove和fastremove:
- //普通删除
- void
ccArrayRemoveObjectAtInd ex(ccArray *arr, unsigned int index, bool bReleaseObj) - {
-
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], remaining * sizeof(CCObject*)); -
} - }
- //快速删除
- void
ccArrayFastRemoveObjectA tIndex(ccArray *arr, unsigned int index) - {
-
//删除元素内容,位置仍保留着 -
CC_SAFE_RELEASE(arr->arr[index]); -
//获取最后一个元素 -
unsigned int last = --arr->num; -
//把最后一个元素插到删除元素的位置上 -
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;