參考文章:

star特530的CSDN博客:http://blog.csdn.net/star530/article/details/18325493

https://github.com/chukong/cocos-docs/blob/master/manual/framework/native/v3/event-dispatcher/zh.md

Size visibleSize = Director::getInstance()->getVisibleSize();
Point origin = Director::getInstance()->getVisibleOrigin(); auto sprite = Sprite::create("CloseNormal.png");
sprite->setPosition(origin + Point(visibleSize.width / 2, visibleSize.height / 2) + Point(-80, 80));
addChild(sprite, 1); auto sprite2 = Sprite::create("CloseNormal.png");
sprite2->setPosition(100, 100);
addChild(sprite2, 1); auto listener1 = EventListenerTouchOneByOne::create(); //创建一个触摸监听
listener1->setSwallowTouches(false); //用lambda表达式
listener1->onTouchBegan = [](Touch *touch, Event *event){
auto target = static_cast<Sprite*>(event->getCurrentTarget()); //获取当前触摸的目标
auto locationInNode = target->convertToNodeSpace(touch->getLocation()); //target相对于触摸点的坐标位置
auto s = target->getContentSize(); //目标的矩形大小,逻辑尺寸,不是像素
auto rect = Rect(0, 0, s.width, s.height);
//推断触摸点是否在目标的范围内
if (rect.containsPoint(locationInNode)){
return true;
}
return false; //要推断触摸点是否在目标的范围内,能够用第二种方法。程序在上面部分就已经返回,这部分不会运行
//getBoundingBox()
if (event->getCurrentTarget()->getBoundingBox().containsPoint(touch->getLocation()))
return true;
return false;
}; ////能够用cocos2d-x的回调函数方式
//listener1->onTouchBegan = CC_CALLBACK_2(HelloWorldScene::onTouchBegan, this);
////或者用std::bind
//listener1->onTouchBegan = std::bind(&HelloWorldScene::onTouchBegan, this, placeholders::_1, placeholders::_2);
////再或者std::function
//std::function<bool(Touch*, Event*)> func = [](Touch *touch, Event *event){
// //省略代码
//};
//listener1->onTouchBegan = func; listener1->onTouchMoved = [](Touch *touch, Event *event){
auto target = static_cast<Sprite*>(event->getCurrentTarget());
target->setPosition(target->getPosition() + touch->getDelta());
}; //将触摸监听加入�到_eventDispatcher,sprite这个參数应该是表示event->getCurrentTarget()这个目标
//假设有另外一个sprite2,假设这里用的是sprite2,那么移动的就是sprite2
//假设同一时候有sprite和sprite2,这里用的是this,那么移动的是整个layer,也就是说sprite和sprite2是同一时候移动的
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, sprite);
//有多个sprite想都能够移动, 用clone()
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(), sprite2);

cocos2d-x 3.0 事件处理的更多相关文章

  1. 高屋建瓴 cocos2d-x-3.0架构设计 Cocos2d (v.3.0) rendering pipeline roadmap(原文)

    Cocos2d (v.3.0) rendering pipeline roadmap Why (the vision) The way currently Cocos2d does rendering ...

  2. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(八)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 回到Xcode中,新建一个EndLayer类,继承于CCNode ...

  3. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(四)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 现在打开MainScene.m文件,首先设置实例变量: @imp ...

  4. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 首先说一下为什么要转换,这是为了后面的A*寻路算法做准备.由于在 ...

  5. 最新版本号cocos2d&#173;2.0&#173;x&#173;2.0.2使用新资源载入策略!不再沿用-hd、-

     前段时间cocos2dx更新了最新版本号cocos2d­2.0­x­2.0.2.也从这个版本号開始对于资源载入与管理都改变了策略. 在之前的载入方式都是通过沿用与cocos2d-iphone一样 ...

  6. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(六)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在Xcode中打开MainScene.h文件,在接口中添加2个方 ...

  7. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(五)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 为了暂时不影响原来的cat移动方法,我们在CatSprite.m ...

  8. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(三)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 下面看一下CatSprite中最复杂的moveToward方法, ...

  9. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(二)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 首先在CatMazeV3中新建CatSprite类,继承于Spr ...

随机推荐

  1. 浅谈malloc/free和new/delete 的区别

    malloc和new的区别 malloc是库函数,需要包头文件才能成功运行编译:new是操作符(C++中的关键字),需要在C++的环境下使用. malloc既可以在C语言中使用也可以在C++中使用,n ...

  2. MEF实现设计上的“松耦合”(二)

    介绍了下MEF的基础用法,让我们对MEF有了一个抽象的认识.当然MEF的用法可能不限于此,比如MEF的目录服务.目录筛选.重组部件等高级应用在这里就不做过多讲解,因为博主觉得这些用法只有在某些特定的环 ...

  3. jsp页面中注释 <!-- --> 和<%-- --%> 的区别

    jsp页面中注释 <!-- --> 和<%-- --%> 的区别 原创 2016年09月01日 17:55:44 标签: jsp注释 5605 今天发现一个问题:在jsp代码中 ...

  4. bzoj 1264 [AHOI2006]基因匹配Match dp + 树状数组

    思路:好难想啊, 考虑到应该从每个数字只有5个数字下手, 但是不知道到底该怎么写.. 首先我们将第一个串按数字的种类分类, 每一类里面有5个, 然后将第二个串里面的数字一个一个加,如果一个加入的第 i ...

  5. 初始Winsock编程

    1.套接字的创建和关闭 使用套接字之前,必须使用socket函数创建一个套接字,此函数调用成功将返回一个套接字句柄. 1 SOCKET socket( 2 int af, //用来指定套接字使用的地址 ...

  6. 安卓webview断网处理

    需求:webview在加载的时候如果网络断开,会显示默认的错误界面,长得很丑,需要单独写一个页面,在网路出错的时候显示,点击重试以后重新加载网页 乍看挺简单的需求,但在实际过程中页碰到了不少坑,主要是 ...

  7. insert ignore duplicate key

    Insert into T1select * from T2  where NOT EXISTS (select 1 from T1 X where X.GUID=T2.GUID);

  8. CodeForces600E Lomsat gelral 线段树合并

    从树上启发式合并搜出来的题 然而看着好像线段树合并就能解决??? 那么就用线段树合并解决吧 维护\(max, sum\)表示值域区间中的一个数出现次数的最大值以及所有众数的和即可 复杂度\(O(n \ ...

  9. [BZOJ4883][Lydsy1705月赛]棋盘上的守卫(Kruskal)

    对每行每列分别建一个点,问题转为选n+m条边,并给每条边选一个点覆盖,使每个点都被覆盖.也就是最小生成环套树森林. 用和Kruskal一样的方法,将边从小到大排序,若一条边被选入后连通块仍然是一个环套 ...

  10. AFNetworking源码品读

    AFNetworking源码品读 AFNetworking这个库几乎是所有苹果开发人员在使用HTTP协议的第一选择,为什么这个库会有这么大的吸引力呢?其实答案就需要问问自己,为什么会用它,而不是别的库 ...