zoukankan      html  css  js  c++  java
  • cocos2dx的模板容器简单使用(Vector,Map,Value)

         

    在cocos2dxv3.0beta之前存在顺序性容器cocos2d::CCArray,和cocos2d::CCDictionary。可是在新版本号之后这两个容器都将被cocos2d::Vector<T>和cocos2d::Map<k,V>取代。

       1. cocos2d::Vector<T>

         cocos2d::Vector<T>是一个封装了动态大小的数组的顺序型容器。
    它的元素是连续存储的。cocos2d::Vector<T> 的存储是自己主动处理的。其内部的数据结构实现实际上是STL标准的顺序型容器 std::vector。

    请记住T 必须是一个指向 cocos2d::Object子类对象的指针。不能是其它数据类型或者原生类型。由于已经将 Cocos2d-x 的内存管理模型集成到cocos2d::Vector<T> 中(从 v3.0 beta 開始)。使用Vector你不用操心内存管理问题,类内部已经帮你处理好了。

    简单使用:

    //使用默认大小创建一个 Vector<Sprite*>,然后往当中增加一个精灵

    auto sp0 = Sprite::create();

    vec0->pushBack(sp0);

     

    //用一个容量初始化一个 vector

    auto sp1 = Sprite::create();

    Vector<Sprite*>  vec1(5);

    vec1.insert(0, sp1);

    这个容器就相当于一个可变大小容器。用于保存cocos2d::object指针对象,假设要保存基本类型能够使用std::vector或者最简单的数组.具体请见 http://www.cocoachina.com/bbs/read.php?

    tid=199793

     

    2. cocos2d::Map<K,V>

    cocos2d::Map<K,V> 是一个内部使用了 std::unordered_map的关联容器模版。


    std::unordered_map 是一个存储了由key-value键值对组合成构成的关联性容器,同意基于键对单个元素进行高速检索。

    在 unordered_map 中,key value 一般用来标识唯一的一个元素。而 mapped value 是一个对象。其内容关联到对于的 key value。在内部,unordered_map 的元素并不依赖于 key 或者 mapped 值来使用不论什么的特定方式排序,而是取决于它们的哈希值,以便通过他们的key值高速訪问单个元素(使用平均时间复杂度)。

     

    K - key value的类型unordered_map 中的每个元素都由它的 key value 唯一标识。

     

    V - mapped value的类型.T 必须是一个指向 cocos2d::Object 子类对象的指针。不能是其它数据类型或者原生类型,由于我们已经将 Cocos2d-x 的内存管理模型集成到 cocos2d::Map<k,V> 中。

    K的值能够食其它类型,可是V的值必须是一个指向 cocos2d::Object 子类对象的指针。

    简单的使用

    //使用默认大小创建一个 Map<K, V>,然后往当中增加一个精灵

    auto sp0 = Sprite::create();

    sp0->setTag(0);

    Map<std::string, Sprite*> map0;

    std::string mapKey0 = "MAP_KEY_0";

    map0.insert(mapKey0, sp0);

    Map<K,V>是一个key-value的容器。

    假设想保存基本类型的value,能够使用std::map<k,v>或者std:: unordered_map<k,v>.具体见http://www.cocoachina.com/bbs/read.php?tid=199916

     

     

      3. cocos2d::Value

     

    cocos2d::Value 是一个包括了非常多原生类型(int,float,double,bool,unsigned char,char* 和 std::string)外加 std::vector<Value>,std::unordered_map<std::string,Value> 和 std::unordered_map<int,Value> 的类。


        你能够把全部上面的提及的原生类型放入 cocos2d::Value 对象中。然后将它们转化为相应的原生类型。反之亦然。
        在 Cocos2d-x v3.0 beta 之前。存在着一些原生类型的封装类,如 CCBool, CCFloat, CCDouble, CCinteger,这些将会被弃用。
    注意:当你在处理原生类型和容器的时候,请使用 cocos2d::Vector<T>,cocos2d::Map<K,V> 和 cocos2d::Value。

    Value不与Vector和Map自己内部管理内存。cocos2d::Value 的内存是由它自己的析构函数自己主动处理的。所以当处理 cocos2d::Value 的内存时请坚持以 c++ 内存管理规则进行最佳实践。

    简单使用

    Value val1(65);  // 用一个int 初始化

    //Value val1(3.4f);  // 用一个float 初始化

    //Value val1(3.5);  // 用一个double 初始化

    log("val1.asByte()= %d",val1.asInt());//读取int数据

    Cocos2d::Value类不是cocos2d::Object的子类,所以不能使用到cocos2d::Vector或cocos2d::Map<K,V>,它仅仅是cocos中一个能够包括其它的数值类型。具体见http://www.cocoachina.com/bbs/read.php?

    tid=200034

    这些都是依据别人改动的。仅仅是为了自己收藏记忆。

  • 相关阅读:
    springboot文件上传: 单个文件上传 和 多个文件上传
    Eclipse:很不错的插件-devStyle,将你的eclipse变成idea风格
    springboot项目搭建:结构和入门程序
    POJ 3169 Layout 差分约束系统
    POJ 3723 Conscription 最小生成树
    POJ 3255 Roadblocks 次短路
    UVA 11367 Full Tank? 最短路
    UVA 10269 Adventure of Super Mario 最短路
    UVA 10603 Fill 最短路
    POJ 2431 Expedition 优先队列
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5088027.html
Copyright © 2011-2022 走看看