博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[cocos2d-x 3.0] 触摸显示器
阅读量:7240 次
发布时间:2019-06-29

本文共 2101 字,大约阅读时间需要 7 分钟。

一、基本使用

1、首先,声明一个监听器

有两种,EventListenerTouchOneByOne 和 EventListenerTouchAllAtOnce,前者是单点触控。后者是多点触控。后者我没怎么用过。不是非常了解。所以这里主要讲单点触控。

2、实现触碰监听各种事件的相应回调方法

这里也有两种

1)CC_CALLBACK_2 回调机制

2)   直接用Lambda 表达式

3、注冊监听

演示样例

1) 用CC_CALLBACK_2 回调机制

//声明监听    auto listener = EventListenerTouchOneByOne::create();        //实现监听回调    listener->onTouchBegan = CC_CALLBACK_2(Test::onTouchBegan, this);    listener->onTouchMoved = CC_CALLBACK_2(Test::onTouchMoved, this);        listener->onTouchEnded = CC_CALLBACK_2(Test::onTouchEnded, this);        //注冊监听    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
三个回调方法,这里没有写详细的内容
bool Test::onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *event){    return true;}void Test::onTouchMoved(cocos2d::Touch *touch, cocos2d::Event *event){    }void Test::onTouchEnded(cocos2d::Touch *touch, cocos2d::Event *event){    }
2) 用Lambda 表达式
//声明监听    auto listener = EventListenerTouchOneByOne::create();        //实现监听回调    listener->onTouchBegan = [](Touch * touch, Event *event){                return true;    };    listener->onTouchMoved = [](Touch * touch, Event *event){            };        listener->onTouchEnded = [](Touch * touch, Event *event){            };        //注冊监听    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
假设不是要反复多次使用的回调方法的话。用Lambda是非常不错的选择,直观,能省不少事。只是Lambda事实上也能多次调用的。这个暂且不说。

二、拖动精灵移动

这个我们要做下面步骤

1、获取触碰坐标

2、推断这个坐标是否包括在精灵里

3、获取鼠标(即我们手指移动)移动的差值

4、精灵移动对应的距离和方向

listener->onTouchMoved = [=](Touch * touch, Event *event){                //获取触碰坐标----这里getLocation()这种方法会自己主动将坐标转换成openGL坐标。不用我们手动转换        auto touchPos = touch->getLocation();                //推断是否在精灵里        if (sp->getBoundingBox().containsPoint(touchPos)) {                        //获取差值            auto movePos = touch->getDelta();                        //精灵移动            sp->setPosition(sp->getPosition() + movePos);        }    };
这里我要说一下getDelta()这种方法。曾经获取差值是要我们自己计算的,通过getPreviousLocation
()这种方法获取上次的坐标,然后与如今的坐标相减来算出。如今已经有算差值的方法了。还是挺贴心的- -。

哦对了。这里这个Lambda表达式须要在[ ]里面加 = 号,表示值传递。这像人才的外部引用和修改变量。关于本可以去看看Lambda要使用

版权声明:本文博主原创文章。博客,未经同意不得转载。

你可能感兴趣的文章
js设计模式——5.状态模式
查看>>
团队冲刺第七天
查看>>
for循环
查看>>
pinpoint本地开发——collector
查看>>
vs2010磁盘空间不足
查看>>
115个Java面试题和答案——终极列表
查看>>
POJ1151 离散化求矩形面积的并
查看>>
Hdu 1730 Nim博弈
查看>>
秋冬咳嗽不吃药 12款民间偏方巧止咳
查看>>
PHP的搭建
查看>>
一个垃圾的Android权限框架
查看>>
扫描局域网中IP MAC地址的命令
查看>>
Python脱产8期 Day30 2019/5/27
查看>>
CROC-MBTU 2012, Final Round (Online version, Div. 2) A - Paper Work
查看>>
TensorFlow介绍(官网资料)
查看>>
Docker系列08—搭建使用私有docker registry
查看>>
使用Hive的web界面:HWI
查看>>
CSS-DOM介绍
查看>>
Flex与Java整合(endpoint的重要性)
查看>>
[html]------行内元素与块级元素
查看>>