cocos2dx中提供了三种基本的数据类型:CCString(字符串),CCArray(数组),CCDictionary(数据字典(哈希的功能))

2.CCString的用法

class  CCString : public CCObject,可见CCString本质是一个CCObject,因此支持create方法和其他CCObject的特性

a.CCString的创建:

CCString *str=CCString("abc");

CCString *str=CCString::create("1234");//CCObject的特性

CCString *str=CCString::createwithformat("id%d",3);//格式化初始化

static CCString* createWithData(const unsigned char* pData, unsigned long nLen);//使用二进制数据里创建一个字符串

static CCString* createWithContentsOfFile(const char* pszFileName);//根据文件来创建一个字符串

b.CCString与其他数据类型的转换:

int intValue() const;

unsigned int uintValue() const;

float floatValue() const;

double doubleValue() const;

bool boolValue() const;

2.CCArray是一个数组容器,用来盛放CCObject类型的对象

a.CCArray的创建方法:

/** 创建一个数组*/
static CCArray* create();
/** 使用一些对象创建数组*/
static CCArray* create(CCObject* pObject, …);
/** 使用一个对象创建数组*/
static CCArray* createWithObject(CCObject* pObject);
/** 创建一个指定大小的数组*/
static CCArray* createWithCapacity(unsigned int capacity);
/** 使用一个现有的CCArray 数组来新建一个数组*/
static CCArray* createWithArray(CCArray* otherArray);

b.CCArray中的删除操作

需要注意的是,CCArray中的remove是把后续的整块数据全部一次性往前移动一个元素的内存距离,而fastremove只是把最后一个元素的内容替换当前要删除的元素的内容,会产生重复的数据:

unsigned int remaining = arr->num - index;
if(remaining>0)
{
  memmove((void *)&arr->arr[index], (void *)&arr->arr[index+1],
  remaining * sizeof(CCObject*));
}

c.CCARRAY_FOREACH和CCARRAY_FOREACH_REVERSE在删除数据的遍历中,反向遍历不会出错,而前向遍历会报错,因为在本次遍历中,指针的位置是固定的,而中间有remove操作会移动整块数据块,导致末尾的指针置空,从而出错.故在可能需要删除数据的遍历中,应尽量使用CCARRY_FOREACH_REVEARE

3.CCDictionary,数据字典

a.数据字典里存储的都是键值对,且key的类型只支持int,或者string中的一种

b.对于某部数据字典,其键值的类型只能唯一确定一种,不能既有int,又有string

c.内部采用了哈希的原理,查找速度和数组差不多

使用方法:

CCDictionary *dict = CCDictionary::create(); //创建数据字典

dict->retain();

/*设置键值对*/

dict->setObject(&str, "id");  //数据字典中存放的都是CCObject对象

dict->setObject(&path, 222);//报错,一个数据字典中,key值必须一致,要么全是int,要么全是string,这里上面是string,这里是int,不行

/*根据键名来获取值*/

CCString *id=(CCString*)dict->objectForKey("id");

//CCString *ph = (CCString*)dict->objectForKey("path");

CCString *ph = (CCString*)dict->objectForKey(2);

CCLog("%s", id->getCString());

CCLog("%s", ph->getCString());

d.使用CCDictionary和xml文件来显示中文

CCDictionary *file = CCDictionary::createWithContentsOfFile("chinese.xml");//通过文件来创建数据字典

CCString *pep = (CCString *)file->objectForKey("people1");//该key是xml文件中已有的,否则报错

CCLog("%s", pep->getCString());

CCLabelTTF * ttf = CCLabelTTF::create(pep->getCString(), "Courier New", 30);

ttf->setPosition(ccp(240, 160));

addChild(ttf);

cocos2dx中的三种基本的数据类型的更多相关文章

  1. java多线程中的三种特性

    java多线程中的三种特性 原子性(Atomicity) 原子性是指在一个操作中就是cpu不可以在中途暂停然后再调度,既不被中断操作,要不执行完成,要不就不执行. 如果一个操作时原子性的,那么多线程并 ...

  2. 061 hive中的三种join与数据倾斜

    一:hive中的三种join 1.map join 应用场景:小表join大表 一:设置mapjoin的方式: )如果有一张表是小表,小表将自动执行map join. 默认是true. <pro ...

  3. 简单谈谈Python中的几种常见的数据类型

    简单谈谈Python中的几种常见的数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等 ...

  4. Java三大框架之——Hibernate中的三种数据持久状态和缓存机制

    Hibernate中的三种状态   瞬时状态:刚创建的对象还没有被Session持久化.缓存中不存在这个对象的数据并且数据库中没有这个对象对应的数据为瞬时状态这个时候是没有OID. 持久状态:对象经过 ...

  5. Asp.Net中的三种分页方式

    Asp.Net中的三种分页方式 通常分页有3种方法,分别是asp.net自带的数据显示空间如GridView等自带的分页,第三方分页控件如aspnetpager,存储过程分页等. 第一种:使用Grid ...

  6. httpClient中的三种超时设置小结

    httpClient中的三种超时设置小结   本文章给大家介绍一下关于Java中httpClient中的三种超时设置小结,希望此教程能给各位朋友带来帮助. ConnectTimeoutExceptio ...

  7. MySQL buffer pool中的三种链

    三种page.三种list.LRU控制调优 一.innodb buffer pool中的三种页 1.free page:从未用过的页 2.clean page:干净的页,数据页的数据和磁盘一致 3.d ...

  8. 研究分析JS中的三种逻辑语句

    JS中的三种逻辑语句:顺序.分支和循环语句. 一.顺序语句 代码规范如下:1. <script type="text/javascript"> var a = 10;  ...

  9. JavaScript中的三种弹出对话框

    学习过js的小伙伴会发现,我们在一些实例中用到了alert()方法.prompt()方法.prompt()方法,他们都是在屏幕上弹出一个对话框,并且在上面显示括号内的内容,使用这种方法使得页面的交互性 ...

随机推荐

  1. 流操作text文件------读取、保存文档

    ************************************一.读取指定text文档中的内容:**************************************** 方法一. t ...

  2. ant 命令学习详解

    ant -verbose  //输出  ant编译时的详情

  3. 转: ImageMagick 命令行的图片处理工具(客户端与服务器均可用)

    http://www.imagemagick.com.cn/ 关于ImageMagick ImageMagick (TM) 是一个免费的创建.编辑.合成图片的软件.它可以读取.转换.写入多种格式的图片 ...

  4. Javascript验证用户输入URL地址是否正确

    <script type="text/javascript">function checkUrl() { var url = document.getElementBy ...

  5. Cisco基本命令配置

    实验一 路由器的基本命令操作 1 实验目标 ü 熟悉路由器的命令行操作 ü 能够使用命令行帮助 ü 能够查看路由器接口信息 ü 能够产看路由器配置信息 ü 能够配置以太网接口 ü 能够配置广域网接口 ...

  6. 20140213-想念是while里的死循环

    // stdafx.h : 标准系统包含文件的包含文件,// 或是经常使用但不常更改的// 特定于项目的包含文件// #pragma once#include "targetver.h&qu ...

  7. 多文件上传artDialog+plupload

    一.效果展示 包括文件上传面板以及文件上传列表 二.介绍 长话短说,采用spring springMVC mybatis maven mysql,实现多文件上传功能,下载使用的是流的形式. 其中涉及的 ...

  8. LeetCode Weekly Contest 12

    1. 第一题 看完题目后,肯定先对houses和heaters排序,然后考虑贪心可以么,我那时候没有想出来,然后看到可以O(n)的判断一个半径是否满足要求,就对半径[0,1e9]进行二分,然后就a了. ...

  9. C++模板实例化(1)

    On-Demand实例化 当C++编译器遇到模板特化的时候,他会利用所给的实参替换对应的模板参数,从而产生该模板的特化.该过程是自动进行的.有时候也会被称为隐式实例化,或者是自动实例化. on-dem ...

  10. activiti源码分析(一)设计模式

    对activiti有基本了解的朋友都知道,activiti暴露了七个接口来提供工作流的相关服务,这些接口具体是如何实现的呢?查看源码发现其实现的形式大体如下: public class Runtime ...