• Cocos2d-x之Value


    |   版权声明:本文为博主原创文章,未经博主允许不得转载。

      Value类被称为包装类,它可以将int, float, bool, unsigned, har, char等,基本数据类型可以包装成为类,也包装一些c++标准类,如std::string,std::vector<Value>, std::unordered_map<std::string, Value> 和std::unordered<int, Value>。使用Value对象的好处是,封装的基本数据类型,可以使它们具有面向对象的特性,在另一方面,也可以便于数据类型之间的转换。(即:可以将Value类型转换成基本类型,也可以将基本类型转换成Value类型)。

    API中的Value常用函数:

     1 /** Create a Value by an unsigned char value. */
     2 /**用无符号字符值创建一个值。*/
     3     explicit Value(unsigned char v);
     4     
     5 /** Create a Value by an integer value. */
     6 /**用整形值创建一个值。*/
     7     explicit Value(int v);
     8     
     9 /** Create a Value by a float value. */
    10 /**用浮点数值创建一个值。*/
    11     explicit Value(float v);
    12     
    13 /** Create a Value by a double value. */
    14 /**用双精度值创建一个值。*/
    15     explicit Value(double v);
    16     
    17 /** Create a Value by a bool value. */
    18 /**用bool(逻辑)值创建一个值。*/
    19     explicit Value(bool v);
    20     
    21 /** Create a Value by a char pointer. It will copy the chars internally. */
    22 /**用字符指针创建一个值。它将复制字符内部。*/
    23     explicit Value(const char* v);
    24     
    25 /** Create a Value by a string. */
    26 /**用字符串值创建一个值。*/
    27     explicit Value(const std::string& v);
    28     
    29 /** Create a Value by a ValueVector object. */
    30 /**通过valuevector对象创建一个值。*/
    31     explicit Value(const ValueVector& v);
    32 
    33 /** Create a Value by a ValueVector object. It will use std::move internally. */
    34 /**通过valuevector对象创建一个值。它将使用内部的std::move。 */
    35     explicit Value(ValueVector&& v);
    36     
    37 /** Create a Value by a ValueMap object. */
    38 /**由ValueMap对象创建一个值。 */
    39     explicit Value(const ValueMap& v);
    40 
    41 /** Create a Value by a ValueMap object. It will use std::move internally. */
    42 /**通过ValueMap对象创建一个值。它将使用内部的std::move。*/
    43     explicit Value(ValueMap&& v);
    44     
    45 /** Create a Value by a ValueMapIntKey object. */
    46 /**通过ValueMapIntKey对象创建一个值。*/
    47     explicit Value(const ValueMapIntKey& v);
    48 
    49 /** Create a Value by a ValueMapIntKey object. It will use std::move internally. */
    50 /**通过ValueMapIntKe对象创建一个值。它将使用内部的std::move。*/
    51     explicit Value(ValueMapIntKey&& v);
    52 
    53 /** Gets as a byte value. Will convert to unsigned char if possible, or will trigger assert error.获取一个字节值。会如果有可能转换为unsigned char型,或会触发断言错误。 */
    54     unsigned char asByte() const;
    55 
    56 /** Gets as an integer value. Will convert to integer if possible, or will trigger assert error. */
    57     int asInt() const;
    58 
    59 /** Gets as a float value. Will convert to float if possible, or will trigger assert error. */
    60     float asFloat() const;
    61 
    62 /** Gets as a double value. Will convert to double if possible, or will trigger assert error. */
    63     double asDouble() const;
    64 
    65 /** Gets as a bool value. Will convert to bool if possible, or will trigger assert error. */
    66     bool asBool() const;
    67 
    68 /** Gets as a string value. Will convert to string if possible, or will trigger assert error. */
    69     std::string asString() const;
    70 
    71 /** Gets as a ValueVector reference. Will convert to ValueVector if possible, or will trigger assert error. */
    72     ValueVector& asValueVector();
    73 
    74 /** Gets as a const ValueVector reference. Will convert to ValueVector if possible, or will trigger assert error. */
    75     const ValueVector& asValueVector() const;
    76 
    77 /** Gets as a ValueMap reference.Will convert to ValueMap if possible, or will trigger assert error. */
    78     ValueMap& asValueMap();
    79 
    80 /** Gets as a const ValueMap reference. Will convert to ValueMap if possible, or will trigger assert error. */
    81     const ValueMap& asValueMap() const;
    82 
    83 /** Gets as a ValueMapIntKey reference. Will convert to ValueMapIntKey if possible, or will trigger assert error. 获取作为一个ValueMapinTKEY参考。会如果有可能转换为ValueMap TKEY,或会触发断言错误。*/
    84     ValueMapIntKey& asIntKeyMap();
    85 
    86 /** Gets as a const ValueMapIntKey reference. Will convert to ValueMapIntKey if possible, or will trigger assert error.作为获取一个const值PrIntKey参考。会如果有可能转换为ValueMapIntKey,或会触发断言错误 */
    87     const ValueMapIntKey& asIntKeyMap() const;
    88 
    89  /** Checks if the Value is null.@return True if the Value is null, false if not.*/
    90     inline bool isNull() const { return _type == Type::NONE; }

    实例:

    .h files
    
    #ifndef _VALUETEST_SCENE_H_
    #define _VALUETEST_SCENE_H_
    #include "cocos2d.h"
    class valueTest : public cocos2d::Layer
    {
    private:
    public:
    	static cocos2d::Scene* createScene();
    	virtual bool init();
    	void valTest();
    	CREATE_FUNC(valueTest);
    };
    #endif // _VALUETEST_SCENE_H_
    
    
    
    .cpp files
    
    val2.getDescription().c_str();这条语句的意思是,输出val2对象所描述的信息。
    #include "ValueTest.h"
    USING_NS_CC;
    Scene* valueTest::createScene()
    {
    	// 'scene' is an autorelease object
    	auto scene = Scene::create();
    	// 'layer' is an autorelease object
    	auto layer = valueTest::create();
    	// add layer as a child to scene
    	scene->addChild(layer);
    	// return the scene
    	return scene;
    }
    bool valueTest::init()
    {
    	if (!Layer::init())
    	{
    		return false;
    	}
    	valTest();
    	return true;
    }
    void valueTest::valTest()
    {
    	//1. 调用默认的构造方法
    	Value val;
    
    	//2. 判断val是否为空
    	if (val.isNull())
    	{
    		log("val is null");
    	}
    	else
    	{
    		std::string str = val.getDescription();
    		log("The description of val: %s", str.c_str());
    	}
    
    	//3. 使用int初始化
    	Value val1(65);
    	log("The description of the int value: %s", val1.getDescription().c_str());
    	log("Value.asBtye() = %c", val1.asByte());
    
    	//4. 使用float初始化
    	Value val2(3.1415f);
    	log("The description of the float value: %s", val2.getDescription().c_str());
    	log("Value.asBtye() = %c", val2.asByte());
    
    	//5. 使用double初始化
    	Value val3(3.1415967);
    	log("The description of the integer value: %s", val3.getDescription().c_str());
    	log("Value.asBtye() = %c", val3.asByte());
    
    	//6. 使用字符串初始化
    	std::string str1 = "china";
    	Value val4(str1);
    	log("The description of the string value: %s", val4.getDescription().c_str());
    
    	//7. 使用Vector初始化
    	auto spr = Sprite::create();
    	Vector<Object*>* vec = new Vector<Object*>();
    	vec->pushBack(spr);
    	Value val5(vec);
    	log("The discription of the Vector value: %s", val5.getDescription().c_str());
    	delete vec;
    
    	//8. 使用Map初始化
    	Map<std::string, Object*>* map = new Map<std::string, Object*>();
    	map->insert(str1, spr);
    	//初始化map
    	Value val6(map);
    	log("The discription of the Map value:%s", val6.getDescription().c_str());
    	delete map;
    }
    

     

  • 相关阅读:
    BZOJ2023: [Usaco2005 Nov]Ant Counting 数蚂蚁
    BZOJ2044: 三维导弹拦截
    BZOJ2982: combination
    Solidity(address的四个方法)
    Solidity基础
    如何搭建以太坊的私有链
    挖矿
    智能合约
    密码学
    比特币
  • 原文地址:https://www.cnblogs.com/geore/p/5799168.html
Copyright © 2020-2023  润新知