大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C++技巧 > Cocos2d-x讲解之用户交互

Cocos2d-x讲解之用户交互(1)

关键词:Cocos2d-x用户交互  阅读(1677) 赞(12)

[摘要]本文是对Cocos2d-x讲解之用户交互的讲解,对学习C++编程技术有所帮助,与大家分享。

如同android中的用户交互,cocos2d-x通常也需要对一些用户点击、触摸事件进行监听;

一、 简单触摸事件

    auto listener = EventListenerTouchAllAtOnce::create();
    listener->onTouchesBegan = [](const std::vector<Touch*>&, Event*) {
        log("onTouchesBegan");
    };
    listener->onTouchesMoved = [](const std::vector<Touch*>& ts, Event* e) {
        log(" touch count is %ld" +ts.size());
    };
    Director::getInstance()->getEventDispatcher()
            ->addEventListenerWithSceneGraphPriority(listener, this);

触摸事件使用的监听接口是EventListenerTouchAllAtOnce,他有如下几个触摸事件回调函数;

public:
    std::function<void(const std::vector<Touch*>&, Event*)> onTouchesBegan;
    std::function<void(const std::vector<Touch*>&, Event*)> onTouchesMoved;
    std::function<void(const std::vector<Touch*>&, Event*)> onTouchesEnded;
    std::function<void(const std::vector<Touch*>&, Event*)> onTouchesCancelled;

4个函数不再说明具体对应功能,函数名已经表示得很清楚;

二、触摸事件传递

有时候需要对角摸事件一个一个的进行捕获,此时就需要用到EventListenerTouchOneByOne,它也有几个回调函数;

public:
    std::function<bool(Touch*, Event*)> onTouchBegan;
    std::function<void(Touch*, Event*)> onTouchMoved;
    std::function<void(Touch*, Event*)> onTouchEnded;
    std::function<void(Touch*, Event*)> onTouchCancelled;

注:onTouchBean返回值为bool类型

    auto listener = EventListenerTouchOneByOne::create();
    listener->onTouchBegan = [](Touch *t, Event * e) {
        log("onTouchBegan");
        return true;
    };
    listener->onTouchMoved = [](Touch* t, Event * e) {
        log("onTouchMoved");
    };
    Director::getInstance()->getEventDispatcher()
            ->addEventListenerWithSceneGraphPriority(listener, this);

注意onTouchBegan事件,如果后面要继续获取其它触摸事件,需要让返回值为true;返回值true表示事件还要继续向后传递;
实际上,cocos2d-x为了程序运行的效率,如果返回值为false,表示事件不再向后传递,将不再捕获onTouchMoved等事件;返回true的时候,才表示事件还要向后传递;

三、加速传感器

    Device::setAccelerometerEnabled(true); // @1
    auto listener = EventListenerAcceleration::create([](Acceleration* a, Event*) {
        log("x:%g,y:%g,z:%g", a->x, a->y, a->z);
    });
    Director::getInstance()->getEventDispatcher()
            ->addEventListenerWithSceneGraphPriority(listener, this);
«上一页12下一页»


相关评论