"程序=数据结构+算法"

在面向对象的语言中,诸如数组、堆栈、队列等的结构都被封装成了特定的类,按照特定数据结构的算法设计起来,这就是容器类。

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容器)的更多相关文章

  1. JQuery攻略(三)数组与字符串

    在上两章,JQuery攻略(一) 基础知识——选择器 与 DOM 和 JQuery攻略(二) Jquery手册 我们为后面的章节打好了基础,在这一章节中,我们继续. 在这一章节中,我们记录的是JQue ...

  2. C++学习笔记(三)--数组、字符串

    1.数组,C++中不允许数组的下标值为变量,只能是常量或者常量表达式,必须先定义后使用.数组赋初值几种常见方式: int a[] = {1,2,3,4,5}: int a[4] = {2,1,3,4} ...

  3. c数组与字符串

    原文链接:http://www.orlion.ga/913/ 一.数组 定义数组: int count[9]; 赋值: int count[4] = { 3, 2, }; 未赋初值的元素用0初始化.如 ...

  4. C语言 第七章 数组与字符串

    一.数组 1.1.数组的概念 用来存储一组相同类型数据的数据结构.有点像班上放手机的手机袋,超市的储物柜. 特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素. ...

  5. PHP基础语法: echo,var_dump, 常用函数:随机数:拆分字符串:explode()、rand()、日期时间:time()、字符串转化为时间戳:strtotime()可变参数的函数:PHP里数组长度表示方法:count($attr[指数组]);字符串长度:strlen($a)

    PHP语言原理:先把代码显示在源代码中,再通过浏览器解析在网页上 a. 1.substr;  //用于输出字符串中,需要的某一部分 <?PHP $a="learn php"; ...

  6. C语言中字符数组和字符串指针分析

    这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么 用到过C,虽然网上这类的文章也有很多,还是决定自己在这 ...

  7. 「C」 数组、字符串、指针

    一.数组 (一)数组 概念:用来存储一组数据的构造数据类型 特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素. (二)数组的定义 格式: 类型 数组名[元素个数 ...

  8. C语言数组:C语言数组定义、二维数组、动态数组、字符串数组

    1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include &l ...

  9. JS中数组和字符串的方法大全

    数组的方法很多,ECMScript5又提供了好几种方法.有空把之前的云上的笔记整理了一下,方便自己以后查找使用. 一.ECMScript 3的Array.prototype中定义的方法 1.join( ...

随机推荐

  1. Hive-1.2.1_05_案例操作

    1. 建库建表 # 建库 create database exercise; # 建表 create table student(Sno int,Sname string,Sex string,Sag ...

  2. mybatis使用<choose> <when>

    一.需求 后台使用orcale数据库,mybatis做持久层,前台搜索功能,根据类型搜索,但是数据库中没有类型字段, 所以需要在where条件语句中进行判断,当type == x1 时和type == ...

  3. python流程控制语句-if语句

    一个if语句 if语句用来检验一个条件, 如果 条件为真,我们运行一块语句(称为 if-块 ),也就是只有一个if判断,当为真的时候就运行一块语句,否则就不运行 下面代码中的if语句控制者缩进的pri ...

  4. jQuery的收尾

    一  后台管理布局增删改 二  常用事件 三  jQuery扩展 一  后台管理布局增删改(多种方法) <!DOCTYPE html> <!-- saved from url=(00 ...

  5. 不可不知 DDoS的攻击原理与防御方法

    DoS攻击.DDoS攻击和DRDoS攻击相信大家已经早有耳闻了吧!DoS是Denial of Service的简写就是拒绝服务,而DDoS就是Distributed Denial of Service ...

  6. 理解 JavaScript 中的 for…of 循环

    什么是 for…of 循环 for...of 语句创建一个循环来迭代可迭代的对象.在 ES6 中引入的 for...of 循环,以替代 for...in 和 forEach() ,并支持新的迭代协议. ...

  7. 第一行代码 3-2-2 软件也要拼脸蛋-UI界面-更强大的滚动条- 卡片

    <LinearLayout android:orientation="vertical" android:layout_width="match_parent&qu ...

  8. 对原型(prototype)理解?

    Javascript是一种通过原型实现继承的语言,与别的高级语言是有区别的,像Java,C#是通过类型决定继承关系的,JavaScript是的动态的弱类型语言,总之可以认为JavaScript所有都是 ...

  9. enq: FB - contention

    Troubleshooting 'enq: FB - contention' Format Block Enqueues. (Doc ID 1379986.1) In this DocumentPur ...

  10. PAT A1013 Battle Over Cities (25 分)——图遍历,联通块个数

    It is vitally important to have all the cities connected by highways in a war. If a city is occupied ...