-
Cocos2dx3.2以后使用Vector<T>代替了CCArray。案例如下:
#ifndef __T02Vector_H__
#define __T02Vector_H__
#include "T32.h"
class T02Vector : public Layer
{
public:
CREATE_FUNC(T02Vector);
//Cocos2dx3.2以后使用Vector代替了CCArray
Vector<Sprite*> _arr;
bool init();
};
#endif
编写:T02Vector.cpp
#include "T02Vector.h"
//in cocos3.2 Vector代替CCArray
//如果不是Ref的子类,那不能用Vector,应该用std::vector
bool T02Vector::init()
{
Layer::init();
Sprite* sprite = Sprite::create();
//增加元素
_arr.pushBack(sprite);
//遍历
Sprite*>::iterator it;
for (it = _arr.begin(); it != _arr.end(); ++it)
{
Sprite* s = *it;
}
for (auto it = _arr.end();++it)
{
}
for (auto it: _arr)
{
}
//从后往前遍历
for (auto it = _arr.rbegin(); it != _arr.rend();++it)
{
}
//删除
_arr.eraSEObject(sprite);
return true;
}
2 Map的用法(注意字符编解码的第三方库有:iconv,cocos中集成的有这方面的功能)
@H_404_50@头文件:T03Map.h
#ifndef __T03Map_H__
#define __T03Map_H__
#include "T32.h"
class T03Map : public Layer{
public:
CREATE_FUNC(T03Map);
bool init();
};
#endif
编写:T03Map.cpp
#include "T03Map.h"
/*
ValueMap是用来代替cocos2d.x的CCDictionary
*/
bool T03Map::init()
{
Layer::init();
//内容的加载
ValueMap& vm = FileUtils::getInstance()->getValueMapFromFile("about.xml");
//CCDictionary* dict = CCDictionary::createWithContentsOfFile("about.xml");
//const CCString* x = dict->valueForKey("x");
//x->intValue();
//查找
auto it = vm.find("aaa");
if (it == vm.end())
{
CCLog("can not find aaa");
}
it = vm."people3");
it->first; //key:的类型是std::string
it->second; //value:的类型是Value,相对cocos3.2.3的CCString
"key is %s,value is %s",it->first.c_str(),it->second.asString().c_str());
"............................end");
vm["中文"] = "bbb";
"........start walk over");
//遍历
for (auto it = vm.begin(); it != vm.end();++it)
{
c_str());
}
"..........................end");
writeToFile(vm,"new.xml");
#if 0
// C++11
for (auto it : vm)
{
it.first;
it.second;
}
// 插入
vm["aa"] = 10;
// 访问,这种访问有副作用,如果bb节点不存在,它会创建一个bb节点
Value& v = vm["bb"];
v = 100;
vm["bb"] = false;
#endif
return true;
}
用到的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的用法
@H_404_50@头文件:T04Label.h
#define __T04Label_H__
#include T04Label :public T04Label);
bool 编写:T04Label.cpp
bool T04Label::init();
{
Label* label = Label::createWithCharMap("fonts/Labelatlas.png",24,32,21); font-family:新宋体; font-size:9.5pt">'0');
label->setString("12345");
addChild(label);
label->setPosition(winSize.width / 2,winSize.height / 2);
}
#if 0
createWithBMFont();
createWithSystemFont("aaa",21); font-family:新宋体; font-size:9.5pt">"Arial",24);
createWithTTF("");
#endif
//Label* label = Label::createWithTexture()
return true;
}
运行结果:
3 T05Touch触摸事件的用法
@H_404_50@头文件:T05Touch.h
#define __T05Touch_H__
#include T05Touch :public Layer
{
public:
T05Touch);
bool init();
void TouchEnded(Touch*,Event *);
};
#endif
编写:T05Touch.cpp
bool T05Touch::init();
{
// 一般使用这种方式,和一个Node相关联
EventListenerTouchOneByOne* ev = EventListenerTouchOneByOne::create();
ev->onTouchBegan = [](Event*){return true; };
// ev->onTouchEnded = [](Touch*,Event*){};
ev->onTouchEnded = CC_CALLBACK_2(TouchEnded,this);
_eventDispatcher->addEventListenerWithSceneGraPHPriority(ev,this);
}
#if 0
{
// 固有优先级的方式使用比较少
create();
ev->setSwallowTouches(true);
ev->onTouchBegan = [](Event*){"Touch Begin"); return true; };
_eventDispatcher->addEventListenerWithFixedPriority(ev,-128);
}
#endif
{
Sprite* node = Sprite::create();
addChild(node);
Touch* touch,133); font-family:新宋体; font-size:9.5pt">Event*){
//通过touch->getLocation()的方式获得被选中的点的位置
Vec2 pt = touch->getLocation();
"Sprite is touched,pt.x=%f,pt.y=%f",pt.x,pt.y);
return true;
};
// ev->onTouchEnded = [](Touch*,Event*){};
// ev->onTouchEnded = CC_CALLBACK_2(T05Touch::TouchEnded,this);
_eventDispatcher->node);
}
{
EventListenerTouchAllAtOnce* ev = EventListenerTouchAllAtOnce::create();
ev->onTouchesBegan = [](const std::vector<Touch*>&,133); font-family:新宋体; font-size:9.5pt">Event*){};
_eventDispatcher->this);
}
return true;
}
void Event*){
}