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

简介:  Cocos2dx3.2以后使用Vector<T>代替了CCArray。案例如下: 头文件:T02Vector.h #ifndef __T02Vector_H__ #define __T02Vector_H__   #include "T32.h"   class

  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的用法(注意字符编解码的第三方库有:iconvcocos中集成的有这方面的功能)

头文件: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.xCCDictionary

*/

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

}

 

目录
相关文章
|
存储 数据采集 数据可视化
【python】当当书籍数据抓取分析与可视化(代码+报告)【独一无二】
【python】当当书籍数据抓取分析与可视化(代码+报告)【独一无二】
|
Web App开发 Linux 数据安全/隐私保护
降低个人密码泄露风险:利用自建服务器部署个人Bitwarden密码管理器
降低个人密码泄露风险:利用自建服务器部署个人Bitwarden密码管理器
2306 0
降低个人密码泄露风险:利用自建服务器部署个人Bitwarden密码管理器
|
关系型数据库 MySQL
926.【mysql】 date 函数
926.【mysql】 date 函数
243 3
|
存储 JavaScript BI
vue组件间通信的几个方法
vue组件间通信的几个方法
134 0
|
12月前
|
机器学习/深度学习 自然语言处理 数据安全/隐私保护
探索Qwen2.5大模型在车险理赔领域的应用
本文探讨了Qwen2.5大模型在车险理赔领域的应用,特别是通过微调模型来优化理赔流程、提高反欺诈能力。文章介绍了车险理赔的数据特点和业务流程,展示了如何准备数据、微调模型,并进行了模型评估和部署的示例。通过这些方法,Qwen2.5能够显著提升理赔效率和准确性,减少人工干预。
1020 1
|
存储 开发工具 Android开发
探索安卓开发:从新手到专家的旅程
【8月更文挑战第24天】在这个数字时代,安卓开发不仅仅是一个技能,它更像是一扇打开无限可能世界的大门。无论你是编程新手还是资深开发者,掌握安卓开发的精髓都能为你带来意想不到的机遇和挑战。本文将通过浅显易懂的语言和实际代码示例,引导你了解安卓开发的基础知识,探索其深层次的技术和应用,并激发你对这一领域的思考和热情。让我们一起踏上这段充满创新和发现的旅程吧!
|
负载均衡 Java 微服务
Java中的可扩展微服务架构设计案例解析
Java中的可扩展微服务架构设计案例解析
|
分布式计算 DataWorks 安全
DataWorks产品使用合集之DataWorks中的任务超过了资源限制,如超过16384或极端情况下超过262144如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
161 0
DataWorks产品使用合集之DataWorks中的任务超过了资源限制,如超过16384或极端情况下超过262144如何解决
|
开发工具 Android开发
即时通讯技术文集(第32期):IM开发综合技术合集(Part5) [共12篇]
为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第32 期。
113 0
|
前端开发 NoSQL API
美多商城项目(十一)
美多商城项目(十一)