加入收藏 |
设为首页 |
会员中心 | 我要投稿
|
李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
cocos2d-x的CCArray用法
发布时间:2020-12-14 19:24:06 所属栏目:百科 来源:网络整理
导读:一.基本用法 1.声明初始化变量 C++ 1 2 3 cocos2d :: CCArray * pArray ; pArray = CCArray :: createWithCapacity ( 100 ) ; pArray - retain ( ; //如果保留成员变量的话,此处必须retain,否则会崩溃,因为标记了autorelease 2.添加元素到数组 C++ 1 2 CCSpr
一.基本用法
1.声明初始化变量
|
cocos2d
::
CCArray
*
pArray
;
pArray
=
CCArray
::
createWithCapacity
(
100
)
;
pArray
->
retain
(
;
//如果保留成员变量的话,此处必须retain,否则会崩溃,因为标记了autorelease
|
2.添加元素到数组
|
CCSprite
*
pRet
=
CCSprite
::
create
(
"test.png"
)
;
pArray
->
addObject
(
pRet
;
//将pRet添加到数组0位置,此处会调用一次pRet的retain
|
3.删除元素
|
//下面这两个函数都能够实现删除元素的效果
pArray
removeObject
(
pRet
//第二参数为是否调用release,默认为true
pArray
removeObjectAtIndex
0
//删除o位置上的元素
|
4.遍历
1).使用ccarray中的宏进行遍历
2).for循环遍历
二.注意事项
1.创建一个CCArray后如果不是立刻使用的话一定要调用retain,增加引用计数,不然会被自动释放!
2.删除CCArray中的元素时最好默认内部调用一次release,不然可能会内存泄露!
3.遍历时删除元素
三.什么时候会用到CCArray?
1.每一个CCNode的children本质就是一个CCArray,这样我们就可以通过getChildren()获得array,进行操作!
2.对于CCSequence如果只有到运行时才能知道有个少个动作时,我们就可以声明一个CCArray然后将动作addObject(),最后通过一个array来创建CCSequence,例如下面这段代码:
1
2
3
4
5
6
7
8
9
10
11
12
//所有的路径节点
CCArray
*
array
CCArray
createWithCapacity
(
20
;
float
dt
=
1
/
(
m_pProperty
->
fMoveSpeed
;
CCPoint
point
(
;
(
UINT
i
0
;
i
<
CGlobal
getGameMap
m_PathNode
size
;
++
i
)
{
array
(
CCMoveTo
(
dt
point
;
}
//移动完毕的回调
CCCallFunc
(
this
callfunc_selector
CMonster
::
onArrive
;
CCSequence
pAct
CCSequence
array
;
|
3.对于一个CCSprite,我们肯定需要把它addChild到parent上,这样他才能显示出来,这样的话parent上就会有好多child,但是我们要遍历只是其中的一部分(例:场景的地图上有好多种花,我们都会把它们添加到同一个parent上,这时候策划说其中的一种花会被怪物踩死?纳尼….,这个时候我们就需要唉将能被踩死的花加入到parent上时同时加入到一个CCArray中去….),这样我们用的时候遍历这个数组就可以了,而不是遍历这个children!
4.多谢@子龙山人 大大的添加,CCArray还可以内存预分配,比如预先生成一堆子弹,然后加到CCArray中,再从这个CCArray中去重用子弹。这样可以提高游戏效率。消失的子弹只需要设置为Invisible就可以了。这个在做射击类游戏中会大量使用的!
5.还有其他用法?发评论告诉我!
(全文完)
转载自http://blog.justbilt.com/25/
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!