首页 > 代码库 > 1.Cocos2dx 3.2中vector,ValueMap,Touch触摸时间的使用.iconv字符编解码

1.Cocos2dx 3.2中vector,ValueMap,Touch触摸时间的使用.iconv字符编解码


  1. Cocos2dx3.2以后使用Vector<T>代替了CCArray。案例如下:

头文件:T02Vector.h

#ifndef__T02Vector_H__

#define__T02Vector_H__

 

#include"T32.h"

 

classT02Vector : publicLayer

{

public:

   CREATE_FUNC(T02Vector);

 

   //Cocos2dx3.2以后使用Vector代替了CCArray

   Vector<Sprite*>_arr;

 

   boolinit();

};

 

#endif

编写:T02Vector.cpp

#include"T02Vector.h"

 

//in cocos3.2 Vector代替CCArray

//如果不是Ref的子类,那不能用Vector,应该用std::vector

boolT02Vector::init()

{

   Layer::init();

   Sprite*sprite = Sprite::create();

   

   //增加元素

   _arr.pushBack(sprite);

 

   //遍历

   Vector<Sprite*>::iteratorit;

   for (it = _arr.begin();it != _arr.end(); ++it)

   {

       Sprite*s = *it;

   }

   for (autoit = _arr.begin();it != _arr.end();++it)

   {

    

   }

 

   for (autoit:_arr)

   {

 

   }

 

   //从后往前遍历

   for (autoit = _arr.rbegin();it != _arr.rend();++it)

   {

 

   }

 

   //删除

   _arr.eraseObject(sprite);

 

   returntrue;

}

2 Map的用法(注意字符编解码的第三方库有:iconvcocos中集成的有这方面的功能)

头文件:T03Map.h

#ifndef__T03Map_H__

#define__T03Map_H__

 

#include"T32.h"

classT03Map :publicLayer{

public:

   CREATE_FUNC(T03Map);

   boolinit();

};

 

#endif

编写:T03Map.cpp

#include"T03Map.h"

 

/*

    ValueMap是用来代替cocos2d.xCCDictionary

*/

boolT03Map::init()

{

   Layer::init();

 

   //内容的加载

   ValueMap&vm =FileUtils::getInstance()->getValueMapFromFile("about.xml");

   

   //CCDictionary* dict = CCDictionary::createWithContentsOfFile("about.xml");

   //const CCString* x = dict->valueForKey("x");

   //x->intValue();

 

   //查找

   autoit =vm.find("aaa");

   if (it == vm.end())

   {

       CCLog("can not find aaa");

   }

 

   it =vm.find("people3");

   it->first;  //key:的类型是std::string

   it->second; //value:的类型是Value,相对cocos3.2.3CCString

   CCLog("key is %s, value is %s",it->first.c_str(),it->second.asString().c_str());

 

   CCLog("............................end");

 

   vm["中文"] = "bbb";

 

   CCLog("........start walk over");

   //遍历

   for (autoit =vm.begin();it !=vm.end();++it)

   {

       CCLog("key is %s,value is %s",it->first.c_str(),it->second.asString().c_str());

   }

   CCLog("..........................end");

 

   FileUtils::getInstance()->writeToFile(vm,"new.xml");

 

#if 0

   // C++11

   for (autoit :vm)

   {

       it.first;

       it.second;

   }

 

   //插入

   vm["aa"] = 10;

 

   //访问,这种访问有副作用,如果bb节点不存在,它会创建一个bb节点

   Value&v =vm["bb"];

   v = 100;

 

   vm["bb"] = false;

#endif

   returntrue;

}

用到的about.xml如下:

<?xml version="1.0" encoding="UTF-8" ?>

<plist>

<dict>

<key>people1</key>

<string>许佳音工作室出品</string>

<key>people2</key>

<string>总监:许佳音</string>

<key>people3</key>

<string>程序:姜博</string>

<key>people4</key>

<string>美术:马俊</string>

<key>people5</key>

<string>改编:班级</string>

</dict>

</plist>

3 T04Label的用法

头文件:T04Label.h

#ifndef__T04Label_H__

#define__T04Label_H__

 

#include"T32.h"

classT04Label :publicLayer{

public:

   CREATE_FUNC(T04Label);

 

   boolinit();

};

 

#endif

编写:T04Label.cpp

#include"T04Label.h"

 

boolT04Label::init()

{

   Layer::init();

 

   {

       Label*label =Label::createWithCharMap("fonts/Labelatlas.png", 24, 32, ‘0‘);

       label->setString("12345");

       addChild(label);

       label->setPosition(winSize.width / 2, winSize.height / 2);

   }

 

#if 0

   Label*label =Label::createWithBMFont();

   Label*label =Label::createWithSystemFont("aaa","Arial", 24);

   Label*label =Label::createWithTTF("");

#endif

   //Label* label = Label::createWithTexture()

   returntrue;

}

运行结果:

3 T05Touch触摸事件的用法

头文件:T05Touch.h

#ifndef__T05Touch_H__

#define__T05Touch_H__

 

#include"T32.h"

classT05Touch :publicLayer

{

public:

   CREATE_FUNC(T05Touch);

 

   boolinit();

   voidTouchEnded(Touch*,Event *);

};

 

#endif

编写:T05Touch.cpp

#include"T05Touch.h"

 

boolT05Touch::init()

{

   Layer::init();

 

   {

       //一般使用这种方式,和一个Node相关联

       EventListenerTouchOneByOne*ev =EventListenerTouchOneByOne::create();

       ev->onTouchBegan = [](Touch*,Event*){returntrue; };

       // ev->onTouchEnded = [](Touch*, Event*){};

       ev->onTouchEnded = CC_CALLBACK_2(T05Touch::TouchEnded,this);

 

       _eventDispatcher->addEventListenerWithSceneGraphPriority(ev,this);

   }

 

#if 0

   {

       //固有优先级的方式使用比较少

       EventListenerTouchOneByOne*ev =EventListenerTouchOneByOne::create();

       ev->setSwallowTouches(true);

 

       ev->onTouchBegan = [](Touch*,Event*){CCLog("Touch Begin");returntrue; };

 

       _eventDispatcher->addEventListenerWithFixedPriority(ev, -128);

   }

#endif

 

   {

       Sprite*node =Sprite::create();

       addChild(node);

 

       EventListenerTouchOneByOne*ev =EventListenerTouchOneByOne::create();

       ev->onTouchBegan = [](Touch*touch,Event*){

           //通过touch->getLocation()的方式获得被选中的点的位置

           Vec2pt =touch->getLocation();

           CCLog("Sprite is touched, pt.x=%f, pt.y=%f",pt.x,pt.y);

           returntrue;

 

       };

       // ev->onTouchEnded = [](Touch*, Event*){};

       // ev->onTouchEnded = CC_CALLBACK_2(T05Touch::TouchEnded, this);

 

       _eventDispatcher->addEventListenerWithSceneGraphPriority(ev,node);

 

   }

 

   {

       EventListenerTouchAllAtOnce*ev =EventListenerTouchAllAtOnce::create();

       ev->onTouchesBegan = [](conststd::vector<Touch*>&,Event*){};

       _eventDispatcher->addEventListenerWithSceneGraphPriority(ev,this);

   }

 

   returntrue;

}

 

voidT05Touch::TouchEnded(Touch*,Event*){

}

 

1.Cocos2dx 3.2中vector,ValueMap,Touch触摸时间的使用.iconv字符编解码