文档章节

【Cocos2d-x基础概念】CCArray

王选易
 王选易
发布于 2013/05/27 17:22
字数 603
阅读 2.9K
收藏 4

#Cocos2d-x-API-详解-CCArray

###CCArray-API的简单介绍

CCArray继承与CCObject类,只是提供了一个面向对象的封装类

创建

<!-- lang: cpp -->
static CCArray* create();
    /** Create an array with some objects */
static CCArray* create(CCObject* pObject, ...);
    /** Create an array with one object */
static CCArray* createWithObject(CCObject* pObject);
    /** Create an array with capacity */
static CCArray* createWithCapacity(unsigned int capacity);
    /** Create an array with an existing array */
static CCArray* createWithArray(CCArray* otherArray);
 /** Create an array */

添加

<!-- lang: cpp -->
/** Add a certain object */
void addObject(CCObject* object);
/** Add all elements of an existing array */
void addObjectsFromArray(CCArray* otherArray);
/** Insert a certain object at a certain index */
void insertObject(CCObject* object, unsigned int index);</span>

删除

<!-- lang: cpp -->
/** Remove last object */
void removeLastObject(bool bReleaseObj = true);
/** Remove a certain object */
void removeObject(CCObject* object, bool bReleaseObj = true);
/** Remove an element with a certain index */
void removeObjectAtIndex(unsigned int index, bool bReleaseObj = true);
/** Remove all elements */
void removeObjectsInArray(CCArray* otherArray);
/** Remove all objects */
void removeAllObjects();
/** Fast way to remove a certain object */
void fastRemoveObject(CCObject* object);
/** Fast way to remove an element with a certain index */
void fastRemoveObjectAtIndex(unsigned int index);

查询

<!-- lang: cpp -->
//正向遍历
CCARRAY_FOREACH(__array__, __object__)
//反向遍历
CCARRAY_FOREACH_REVERSE(__array__, __object__)

    /** Returns element count of the array */
unsigned int count();
/** Returns capacity of the array */
unsigned int capacity();
/** Returns index of a certain object, return UINT_MAX if doesn't contain the object */
unsigned int indexOfObject(CCObject* object);
/** Returns an element with a certain index */
CCObject* objectAtIndex(unsigned int index);
/** Returns last element */
CCObject* lastObject();
/** Returns a random element */
CCObject* randomObject();
/** Returns a Boolean value that indicates whether object is present in array. */
bool containsObject(CCObject* object);
/** @since 1.1 */
bool isEqualToArray(CCArray* pOtherArray);
// Adding Objects

注意不要在CCARRAY_FOREACH中对CCArray中的元素进行删除或添加。

###CCArray中的陷阱

CCArray一般不会被添加到其他的类中,所以其引用计数为1,并且被设置为autorelease

所以,创建的CCArray对象一定要retain,并在其析构方法中调用release释放内存

因此:

初始化

<!-- lang: cpp -->
CCArray *tmpArray = CCArray::array();
tmpArray->retain();

增加元素

    <!-- lang: cpp -->
tmpArray>addObject(元素);

删除

<!-- lang: cpp -->
tmpArray->removeAllObjects();
tmpArray->release();

cocos2d-x里,所有autorelease的对象只能在一个event loop里保持有效,也就是一次渲染frame,当每帧渲染结束时,pool manager会对他管理的每个autorelease的对象做一次release()调用,cocos2d-x里的代码很明确:

<!-- lang: cpp -->
void CCDisplayLinkDirector::mainLoop(void)
{
    ...
         // release the objects
         CCPoolManager::sharedPoolManager()->pop();        
     ...
}

void CCPoolManager::pop()
{
    ...
    m_pCurReleasePool->clear();
    ...

所以,如果要想让生成的CCArray长久有效,就得调一次retain操作,在不需要的时候调release。

###CCArray查询得到CCObject对象后怎么转型

####在Lua脚本中

举例如下:

    <!-- lang: lua -->
local str = arrbjectAtIndex(0)
str = tolua.cast (str, "CCString")

####在C++中

举例如下:

(static_cast<cocos2d::CCSprite*>item)->getPosition();

详细可以看这里

© 著作权归作者所有

王选易

王选易

粉丝 99
博文 20
码字总数 20066
作品 3
南京
程序员
私信 提问
加载中

评论(0)

【Cocos2d-x-基础概念】Animations

Cocos2d-x-基本概念-Animations 帧动画 你可以通过一系列的图片来创建一个童话,如下 CCAnimation *animation = CCAnimation:create(); //load image file from local system to CCSpriteFr......

王选易
2013/05/21
1.6K
0
[初探Cocos2d-x]之CCArray

CCArray是一个数据结构类,它对游戏存储数组型数据做了优化。在使用Cocosd-x开发游戏的过程中CCArray使用频繁。 CCArray的创建 // 创建一个数组static CCArray* create(); // 使用一些对象创...

ithresh
2014/04/09
86
0
【深入Cocos2d-x】探索Cocos2d-x中的内存管理-引用计数和自动释放池

深入Cocos2d-x-探索Cocos2d-x中的内存管理-引用计数和自动释放池 引用计数(Reference Count) 引用计数是一种在C++中相当古老的内存管理方法,ios中将这种机制包括在NSAutoreleasePool中。所...

王选易
2013/05/27
3.6K
3
Cocos2d-x3.0模版容器详解之一:cocos2d::Vector

1.概述 版本:v3.0 beta 语言:C++ 定义在 “COCOS2DXROOT/cocos/base” 路径下的 "CCVector.h" 的头文件中。 ? cocos2d::Vector<T> 是一个封装了动态大小的数组的顺序型容器。 它的元素是连...

_子墨
2014/08/15
116
0
cocos2d-x学习笔记18:内存管理01:概述

一、概述 cocos2d-x最初移植自cocos2d的objective C版本。因此,在内存管理上,使用了和NSObject类似的引用计数器方法,相关接口放置在CCObject类中。 二、引用计数器——手动管理内存 CCOb...

技术小胖子
2017/11/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux - 登录警示信息

echo "\🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲⛔️ UNAUTHORIZED ACCESS TO THIS DEVI...

wffger
20分钟前
56
0
Spring框架-第四篇

第一章: Spring 中的 JdbcTemplate 1.1-JdbcTemplate 概述 它是 spring 框架中提供的一个对象,是对原始 Jdbc API 对象的简单封装。spring 框架为我们提供了很多 的操作模板类。 操作关系型...

IT原力比特
21分钟前
54
0
在GROUP BY中使用LIMIT获得每个组N个结果?

以下查询: SELECTyear, id, rateFROM hWHERE year BETWEEN 2000 AND 2009AND id IN (SELECT rid FROM table2)GROUP BY id, yearORDER BY id, rate DESC 产量: year id rate200......

javail
22分钟前
52
0
Mac上如何恢复被同名另一个文件替换的文件?

今天的文章是关于Mac上如何恢复被同名另一个文件替换的文件?在计算机上保存文件时,如果已经存在一个具有相同名称的文件,则可能会弹出。例如,“ XXX已经存在。您要替换它吗?” “是否要用...

麦克虾仔
24分钟前
47
0
Linux就该这么学 -- vim编辑器

待完善

jionzhao
28分钟前
58
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部