cocos2d-x 3.0 事件处理
參考文章:
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 事件处理的更多相关文章
- 高屋建瓴 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 ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(八)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 回到Xcode中,新建一个EndLayer类,继承于CCNode ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(四)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 现在打开MainScene.m文件,首先设置实例变量: @imp ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(一)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 首先说一下为什么要转换,这是为了后面的A*寻路算法做准备.由于在 ...
- 最新版本号cocos2d­2.0­x­2.0.2使用新资源载入策略!不再沿用-hd、-
前段时间cocos2dx更新了最新版本号cocos2d2.0x2.0.2.也从这个版本号開始对于资源载入与管理都改变了策略. 在之前的载入方式都是通过沿用与cocos2d-iphone一样 ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(六)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在Xcode中打开MainScene.h文件,在接口中添加2个方 ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(五)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 为了暂时不影响原来的cat移动方法,我们在CatSprite.m ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(三)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 下面看一下CatSprite中最复杂的moveToward方法, ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(二)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 首先在CatMazeV3中新建CatSprite类,继承于Spr ...
随机推荐
- 一些你可能需要的okhttp实现
https://blog.csdn.net/qq_17766199/article/details/53186874 今天分享一些我在项目中使用到的okhttp实现,由简至难.(以下内容均在okhtt ...
- day5模块学习--shelve模块
shelve模块 shelve类似于一个key-value数据库,可以很方便的用来保存Python的内存对象,其内部使用pickle来序列化数据,简单来说,使用者可以将一个列表.字典.或者用户自定义的 ...
- Abstract Factory 抽象工厂
意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 适用性 一个系统要独立于它的产品的创建.组合和表示时 结构 参与者 AbstractFactory:声明一个创建抽象产品对象 ...
- moment.js笔记
增加日期时间 moment().add(Number, String); moment().add(Duration); moment().add(Object); 添加天数: moment().ad ...
- Gitlab Webhooks, External Services, and API(一)
一. 和外部服务进行集成 Gitlab支持和不同的外部服务进行集成,比如可以和聊天工具,Slack或者Campfire进行集成,或者和项目管理工具进行集成.如Assembla或者Pivotal Tra ...
- slf4j logback pom
pom: <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding&g ...
- js缓存加密
1.访问A链接就以A链接的特定部分为密码盐,生成一个js跳转配置文件名 aojoweiojoiwjeiof2.PHP在生成js跳转文件名的时候,也是根据数据库中的跳转起始链接特定部分作为盐,生成的文件 ...
- PHP isset和empty 详细比较
找了几篇博文,这应该是说的最清楚的.链接如下:http://blog.chinaunix.net/uid-25311424-id-3966622.html
- python脚本获取本机公网ip
1.获取公网IP地址方式,访问:http://txt.go.sohu.com/ip/soip 2.python脚本实现: #!/usr/bin/python # -*- coding:utf8 -*- ...
- OpenGL笔记<第一章> 构建 GLSL class
恭喜,我们终于很扎实地完成了第一章——glsl 入门 不幸的是,it's not the basic of GLSL shader ,我们下一节开篇,basic of GLSL shader 在下一章 ...