数组与字符串三(Cocos2d-x 3.x _Array容器)
"程序=数据结构+算法"
在面向对象的语言中,诸如数组、堆栈、队列等的结构都被封装成了特定的类,按照特定数据结构的算法设计起来,这就是容器类。
Cocos2d-x中,能使用的容器类:C++标准容器类、Cocos2d-x中定义的容器类。其中,列表容器类包括:_Array、Vector<T>和ValueVector;字典容器包括:_Dictionary、Map<K,V>、ValueMap和ValueMapIntKey。
_Array 继承于Ref类,(2.x版本中是CCArray),通过引用计数管理内存。容纳的是Ref及子类所创建的对象指针。
实现: 点击按钮,响应事件为创建100个精灵。
主要实现代码:
1、在Helloworld.h文件中声明
#define MAX_COUNT 100
即,所用到的_Array容器创建的成员变量的起始容量的值
2、在Helloworld.cpp文件中,
//增加菜单项 点击之后出现精灵
auto goItem = MenuItemImage::create(
"go-down.png",
"go-up.png",
CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
//设置菜单图片的位置
goItem->setPosition(Vec2(origin.x + visibleSize.width - goItem->getContentSize().width/2 ,
origin.y + goItem->getContentSize().height/2));
auto menu = Menu::create(goItem, NULL);
menu->setPosition(Vec2::ZERO);
this->addChild(menu, 1);
//创建 _Array* 类型的变量list,参数为它的初始容量
this->list = __Array::createWithCapacity(MAX_COUNT);
//list的创建是通过静态方法创建,如果不调用retain函数,当init函数结束时,会自动释放,当别的函数中再使用list时,就会报错
this->list->retain();
//所要创建精灵的个数
for(int i = 0;i < MAX_COUNT; ++i){
Sprite* sprite = Sprite::create("Ball.png");
this->list->addObject(sprite);
//触摸菜单图标后触发的函数
void HelloWorld::menuCloseCallback(Ref* pSender)
{
Ref* obj = nullptr;
log("list->count() = %d",this->list->count());
Size visibleSize = Director::getInstance()->getVisibleSize();
//循环遍历 容器中的数据
CCARRAY_FOREACH(this->list, obj) {
//获得精灵对象
Sprite* sprite = (Sprite*)obj;
//随机生成精灵的x、y坐标
int x = CCRANDOM_0_1() * visibleSize.width;
int y = CCRANDOM_0_1() * visibleSize.height;
sprite->setPosition( Vec2(x, y) );
this->removeChild(sprite);
this->addChild(sprite);
}
}
HelloWorld::~HelloWorld()
{
//前面说过手动设置保持list的内存,现在要手动释放
//释放list里面的所有对象
this->list->removeAllObjects();
//释放list容器对象
CC_SAFE_RELEASE_NULL(this->list);
}
结果:

数组与字符串三(Cocos2d-x 3.x _Array容器)的更多相关文章
- JQuery攻略(三)数组与字符串
在上两章,JQuery攻略(一) 基础知识——选择器 与 DOM 和 JQuery攻略(二) Jquery手册 我们为后面的章节打好了基础,在这一章节中,我们继续. 在这一章节中,我们记录的是JQue ...
- C++学习笔记(三)--数组、字符串
1.数组,C++中不允许数组的下标值为变量,只能是常量或者常量表达式,必须先定义后使用.数组赋初值几种常见方式: int a[] = {1,2,3,4,5}: int a[4] = {2,1,3,4} ...
- c数组与字符串
原文链接:http://www.orlion.ga/913/ 一.数组 定义数组: int count[9]; 赋值: int count[4] = { 3, 2, }; 未赋初值的元素用0初始化.如 ...
- C语言 第七章 数组与字符串
一.数组 1.1.数组的概念 用来存储一组相同类型数据的数据结构.有点像班上放手机的手机袋,超市的储物柜. 特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素. ...
- PHP基础语法: echo,var_dump, 常用函数:随机数:拆分字符串:explode()、rand()、日期时间:time()、字符串转化为时间戳:strtotime()可变参数的函数:PHP里数组长度表示方法:count($attr[指数组]);字符串长度:strlen($a)
PHP语言原理:先把代码显示在源代码中,再通过浏览器解析在网页上 a. 1.substr; //用于输出字符串中,需要的某一部分 <?PHP $a="learn php"; ...
- C语言中字符数组和字符串指针分析
这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么 用到过C,虽然网上这类的文章也有很多,还是决定自己在这 ...
- 「C」 数组、字符串、指针
一.数组 (一)数组 概念:用来存储一组数据的构造数据类型 特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素. (二)数组的定义 格式: 类型 数组名[元素个数 ...
- C语言数组:C语言数组定义、二维数组、动态数组、字符串数组
1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include &l ...
- JS中数组和字符串的方法大全
数组的方法很多,ECMScript5又提供了好几种方法.有空把之前的云上的笔记整理了一下,方便自己以后查找使用. 一.ECMScript 3的Array.prototype中定义的方法 1.join( ...
随机推荐
- 罗马数字转整数的golang实现
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I V X L C D M 例如, 罗马数字 2 写做 II ,即为两个并列的 1.12 写做 XII ,即为 X + ...
- 控件布局_TableLayout
<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android=" ...
- 【转】联想笔记本进入u盘启动项操作方法详解
win7之家小编最近可是对联想笔记本进入u盘启动项的方法很有兴趣啊,那么联想进入u盘启动到底要怎么操作呢?其实方法是有的,因为小编就是研究联想进入u盘启动出身的,下面小编就给大家带来史上最详细的联想笔 ...
- PCB (5) 创建自己的原件库
创建如何创建 创建原理图元器件库 创建器件原理图 创建器件PCB 如何创建器件PCB 1自己画 2修改现有 3联合PCB和原理图 1创建原理图元器件库 2创建器件原理图 画图形 从其他复制修改原理图 ...
- Guide to Porting MetaMask to a New Environment
https://github.com/MetaMask/metamask-extension/blob/develop/docs/porting_to_new_environment.md MetaM ...
- Mybatis集成(转)
文章转自http://blog.csdn.net/l454822901/article/details/51829653 什么是Mybatis MyBatis 本是apache的一个开源项目iBati ...
- nodejs写入json文件,格式化输出json的方法
假如我需要把data序列化成json字符串,然后写入data.json文件中,代码如下: let str = JSON.stringify(data) fs.writeFile('data.json' ...
- java 日期与时间类
1.Date类: https://www.cnblogs.com/huangminwen/p/5994927.html 2.DateFormat和SimpleDateFormat (simple简单 ...
- RBAC 基于权限的访问控制 serviceaccount -- clusterRole clusterRoleBinding
1.Role , RoleBinding 的作用对象都是namespace. 2.通过RoleRef,可以看到,RoleBinding对象通过名字,直接引用前面定义的Role,实现subject(us ...
- 解密:Python风靡全宇宙,首要原因竟是它?
就让我们从近年来大数据的兴起说起,为你娓娓道来Python火爆的真正原因. 郁闷的大数据程序员 随着大数据的崛起,大多数行业发现自己进入了一种恐慌状态:他们花费了大量的时间和金钱来建立他们的大数据渠道 ...