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的用法(注意字符编解码的第三方库有: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*){

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涂作权的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值