- 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);
//遍历
Vector<Sprite*>::iterator
it;
for
(it
= _arr.begin();
it
!= _arr.end();
++it)
{
Sprite*
s
= *it;
}
for
(auto
it
= _arr.begin();
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中集成的有这方面的功能)
头文件: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.find("people3");
it->first;
//key:的类型是std::string
it->second;
//value:的类型是Value,相对cocos3.2.3的CCString
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 (auto
it =
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 (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的用法
头文件:T04Label.h
#ifndef
__T04Label_H__
#define
__T04Label_H__
#include
"T32.h"
class
T04Label :public
Layer{
public:
CREATE_FUNC(T04Label);
bool
init();
};
#endif
编写:T04Label.cpp
#include
"T04Label.h"
bool
T04Label::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()
return
true;
}
运行结果:
3
T05Touch触摸事件的用法
头文件:T05Touch.h
#ifndef
__T05Touch_H__
#define
__T05Touch_H__
#include
"T32.h"
class
T05Touch :public
Layer
{
public:
CREATE_FUNC(T05Touch);
bool
init();
void
TouchEnded(Touch*,Event
*);
};
#endif
编写:T05Touch.cpp
#include
"T05Touch.h"
bool
T05Touch::init()
{
Layer::init();
{
//
一般使用这种方式,和一个Node相关联
EventListenerTouchOneByOne*
ev =
EventListenerTouchOneByOne::create();
ev->onTouchBegan
= [](Touch*,
Event*){return
true; };
//
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");
return
true; };
_eventDispatcher->addEventListenerWithFixedPriority(ev,
-128);
}
#endif
{
Sprite*
node =
Sprite::create();
addChild(node);
EventListenerTouchOneByOne*
ev =
EventListenerTouchOneByOne::create();
ev->onTouchBegan
= [](Touch*
touch,
Event*){
//通过touch->getLocation()的方式获得被选中的点的位置
Vec2
pt =
touch->getLocation();
CCLog("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->addEventListenerWithSceneGraphPriority(ev,
node);
}
{
EventListenerTouchAllAtOnce*
ev =
EventListenerTouchAllAtOnce::create();
ev->onTouchesBegan
= [](const
std::vector<Touch*>&,
Event*){};
_eventDispatcher->addEventListenerWithSceneGraphPriority(ev,
this);
}
return
true;
}
void
T05Touch::TouchEnded(Touch*,
Event*){
}