參考文章:

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. 拥抱 Android Studio 之一:从 ADT 到 Android Studio

    http://kvh.io/cn/embrace-android-studio-migration.html 1. 拥抱变化,拥抱新事物 Android Studio(IntelliJ IDEA)vs ...

  2. Asp.net Vnext 模块化实现

    概述 本文已经同步到<Asp.net Vnext 系列教程 >中] 在程序中实现模块化可以加快开发效率,通过替换模块实现升级. 架构 vnext 没有 Virtualpathprovide ...

  3. Android开发——子线程操作UI的几种方法(待续)

    方法2  Handler andler mHandler = new Handler() { @Override public void handleMessage(Message msg) { su ...

  4. 【LOJ】#2430. 「POI2014」沙拉餐厅 Salad Bar

    题解 波兰人的j是苹果,p是橘子 还真是跟中国过不去啊= =写的时候很难受 我们先求出每个点作为起点,能延伸到的最大长度,这个可以处理成前缀和,查询一下区间最小值是不是小于0,用st表实现,如果区间最 ...

  5. Exception in thread ""http-bio-80"exec-1" java.lang.OutOfMemoryError: PermGen s解决方案

    问题描述: Exception in thread ""http-bio-80"-exec-1" java.lang.OutOfMemoryError: Per ...

  6. 【Java网络编程】基于 UDP 的聊天通信

    使用 udp 协议,写一个基于命令行的聊天软件:客户端跟服务端分别在命令行启动之后,客户端和服务器端可以互相发送数据. 代码实现如下: 一.创建线程 sendThread 和 receiveThrea ...

  7. 分布式系统的一致性算法------《Designing Data-Intensive Applications》读书笔记13

    一致性算法是分布式系统中最重要的问题之一.表面上看,这似乎很简单,只是让几个节点在某些方面达成一致.在本篇之中,会带大家完整的梳理分布式系统之中的共识算法,来更加深刻的理解分布式系统的设计. 1.原子 ...

  8. 虚拟机zookeeper和hbase集群搭建

    集群zookeeper dataDir=/usr/local/zookeeper/dataDir dataLogDir=/usr/local/zookeeper/dataLogDir # the po ...

  9. Spring boot集成Mybatis-Plus,通用Mapper

    Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发.提高效率而生.(摘自mybatis-plus官网)Mybatis虽然已 ...

  10. [leetcode tree]107. Binary Tree Level Order Traversal II

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...