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"

 

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*){

}

 

时间: 2024-09-30 03:25:43

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

Cocos2d-x中Vector&amp;lt;T&amp;gt;容器以及实例介绍

Vector<T> 是Cocos2d-x 3.x推出的列表容器因此它所能容纳的是Ref及子类所创建的对象指针其中的T是模板表示能够放入到容器中的类型在Cocos2d-x 3.x中T表示Ref类.Vector<T>是模仿C++的std::vector<T>模板类而设计的.在内存管理方面不使用__Array的引用计数它的内存管理是由编译器自动处理的可以不用考虑内存释放问题.Vector<T>的性能优于__Array类Coco2d-x官方将Vector<T&

关于Cocos2dx 3.1中给Button增加一个touch事件监听的时候运行出错的问题

问题描述 关于Cocos2dx 3.1中给Button增加一个touch事件监听的时候运行出错的问题 Button *login = (Button *)widget->getChildByName("login"); login->addTouchEventListener(CC_CALLBACK_1(RegisterUI::OnClick, this)); 编译能过 但是运行的时候运行到 addTouchEventListener的时候就出错了 报错信息 0x0F6C3

c++-C++中vector容器存放字符串,输出错误

问题描述 C++中vector容器存放字符串,输出错误 #include<iostream> #include<vector> #include<string> using namespace std; int main() { vector<char*> Sentence; vector<char*>::iterator p; char ch[100]=""; while(cin.getline(ch,100,'n')) {

c++基础-【初学者跪地求助】一个关于类中vector类型调用的问题。

问题描述 [初学者跪地求助]一个关于类中vector类型调用的问题. 一个项目管理的程序,现在在写输出项目中任务列表的功能. getTaskList()函数中似乎总是无法调用project类中的 任务列表vector 程序运行就会崩溃 C++初学者求帮助啊! 数据已经由initData()函数初始化 有两个包含任务列表的容器 还有一个包含项目列表的容器 #include #include #include using namespace std; class Time { public: Tim

c++-C++中vector的clear()的小问题

问题描述 C++中vector的clear()的小问题 就是在我加注释的那一行 在刚创立vector的时候他不就是空的吗,为什么还需要clear()一下 我试了把这行代码删除,然后提交(原本是AC了)就TLE了 这是HD的1520,求教各位大神! #include <iostream> #include <vector> #include <cstdio> #include <cstring> using namespace std; struct node

java代码-关于java中vector的创建问题

问题描述 关于java中vector的创建问题 vector vt = new vector() 是什么意思?为什么要这样写,这样不行吗 vector vt = new vector() 解决方案 定义了一个叫做vt的向量对象,并且调用默认的构造函数对它初始化. 解决方案二: java 中创建Vector二维数组添加一维Vector的问题vector 内存泄露问题

java中vector与hashtable操作实例分享_java

众所周知,java中vector与hashtable是线程安全的,主要是java对两者的操作都加上了synchronized,也就是上锁了.因此 在vector与hashtable的操作是不会出现问题.但是有一种情况:就是将一个hashtable copy到另一个hashtable时,假如使用putAll方法的花,会抛出一个 java.util.ConcurrentModificationException异常.先上代码: TestSync.java 复制代码 代码如下: public clas

Cocos2d-x 3.0中集成社交分享ShareSDK的详细步骤和常见问题解决_Android

给自己的手机游戏增加些社交分享功能,有助于游戏宣传和提升知名度,是一种不错的社交营销手段.国内这方面的第三方插件有不少,比如ShareSDK.友 盟分享组件.Baidu分享组件等,之前在研究2.2.2版本时,集成了ShareSDK这个组件,这次迁移到Cocos2d-x 3.0rc2依旧选择集成ShareSDK,这里就来说说集成的过程,遇到的一些问题以及解决方法.这里仅以Android平台游戏集成为例. 一.功能描述.SDK版本和帐号准备 功能大致是这样的:在游戏中设置一个按钮,点击这个按钮,弹出

vector-JAVA中Vector从.dat文件读取对象怎么做到的

问题描述 JAVA中Vector从.dat文件读取对象怎么做到的 用以下方法读的.dat文件 FileInputStream fi=new FileInputStream("stu.dat"); ObjectInputStream si=new ObjectInputStream(fi); .dat的文件,里面存了多个学搜索生信息,包括姓名,学号等,怎么从文件中读出并且写入Vector中 主要是不能确定学生对象的个数,所以选择用Vector,但是又不知道怎么写 ,我查了些资料,那些书里