当前位置: 首页 > news >正文

cocos2d-x Touch触屏事件

说明:这篇文章引用过来,主要提供给对这部分内容不太熟悉的学员参考。

FROM:http://blog.csdn.net/h1023417614/article/details/20390153


单点触控

前提是继承CCLayer 

1. OnEnter或init中添加开启触屏接收属性:

setTouchEnabled(true);

2. 重载

virtual void registerWithTouchDispatcher(void);

并添加: /* 注册触屏事件 */

CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this,0, true)

3. 重载需要的响应函数

ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);

ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);  

ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);

 

下面看一个例子:

新建HelloWorld, AppDelegate.cpp的applicationDidFinishLaunching注释掉原有HelloWorld的,添加CCScene *pScene = GameScene::scene();

为工程添加新类GameScene.定义如下:

[cpp] view plaincopy

  1. #pragma once  

  2. #include "cocos2d.h"  

  3.   

  4. using namespace cocos2d;  

  5.   

  6. class GameScene :  

  7.     public CCLayerColor  

  8. {  

  9. public:  

  10.     static cocos2d::CCScene* scene();  

  11. public:  

  12.     virtual bool init();  

  13.   

  14.     virtual bool ccTouchBegan(CCTouch *pTouches, CCEvent *pEvent);  ///重载 

  15.     virtual void ccTouchMoved(CCTouch *pTouches, CCEvent *pEvent);  ///重载 

  16.     virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);  ///重载 

  17.     virtual void registerWithTouchDispatcher(); ///重载 

  18.   

  19.     void menuCloseCallback(CCObject* pSender);  

  20.     CREATE_FUNC(GameScene);  

  21.   

  22.     void updateSize(CCPoint p);  

  23. };  

 

[cpp] view plaincopy

  1. #include "GameScene.h"  

  2. #include "HelloWorldScene.h"  

  3.   

  4. using namespace cocos2d;  

  5.   

  6. CCScene* GameScene::scene()  

  7. {  

  8.     CCScene* scene = CCScene::create();  

  9.     GameScene *gameScene = GameScene::create();  

  10.     scene->addChild(gameScene);  

  11.     return scene;  

  12. }  

  13.   

  14. bool GameScene::init()  

  15. {  

  16.     CCLayerColor::init();  

  17.   

  18.     CCSize size = CCDirector::sharedDirector()->getWinSize();  

  19.   

  20.     setTouchEnabled(true);  //添加开启触屏接收属性:

  21.   

  22.     CCLayerColor *colorRect = CCLayerColor::create(ccc4(255, 255, 0, 255), 200.0, 200.0);  

  23.   

  24.     colorRect->setPosition(ccp(size.width/2, size.height/2));  

  25.     colorRect->ignoreAnchorPointForPosition(false);  

  26.     addChild(colorRect, 0, 1);  

  27.   

  28.     CCActionInterval *colorAction = CCRepeatForever::create((CCActionInterval *)CCSequence::create(  

  29.         CCTintTo::create(0.2f, 255, 0, 0),  

  30.         CCTintTo::create(0.2f, 0, 255, 0),  

  31.         CCTintTo::create(0.2f, 0, 0, 255),  

  32.         CCTintTo::create(0.2f, 0, 255, 255),  

  33.         CCTintTo::create(0.2f, 255, 255, 0),  

  34.         CCTintTo::create(0.2f, 255, 0, 255),  

  35.         CCTintTo::create(0.2f, 255, 255, 255),  

  36.         NULL));  

  37.   

  38.     colorRect->runAction(colorAction);  

  39.   

  40.     return true;  

  41. }  

  42.   

  43. bool GameScene::ccTouchBegan(CCTouch *pTouches, CCEvent *pEvent)  /

  44. {  

  45.     CCPoint point = pTouches->getLocation();  

  46.     updateSize(point);  

  47.     return true;  

  48. }  

  49.   

  50.   

  51. void GameScene::ccTouchMoved(CCTouch *pTouches, CCEvent *pEvent)  /

  52. {  

  53.     CCPoint point = pTouches->getLocation();  

  54.     updateSize(point);  

  55. }  

  56.   

  57. void GameScene::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)  //

  58. {  

  59.     CCPoint point = pTouch->getLocation();  

  60.     updateSize(point);  

  61. }  

  62.   

  63. void GameScene::updateSize(CCPoint p)  

  64. {  

  65.     CCSize size = CCDirector::sharedDirector()->getWinSize();  

  66.     CCSize newSize = CCSizeMake( fabs(p.x-size.width/2)*2, fabs(p.y-size.height/2)*2 );  

  67.     CCLayerColor *layer = (CCLayerColor*)getChildByTag(1);  

  68.     layer->setContentSize(newSize);  

  69. }  

  70.   

  71. void GameScene::registerWithTouchDispatcher()  /// /* 注册触屏事件 */

  72. {  

  73.     CCDirector* pDirector = CCDirector::sharedDirector();  

  74.     pDirector->getTouchDispatcher()->addTargetedDelegate(this, kCCMenuHandlerPriority + 1, true);  

  75. }  

运行点击屏幕,拖动屏幕可看到效果。

 

CCDirector的addTargetedDelegate的作用是在Dispatcher的列表中注册一个触屏事件的委托,用来监听用户的触屏事件。

参数分别为:触屏世家你委托CCTouchDelegate目标,优先级(值越高越早被响应),是否拦截触屏事件(true表示拦截触屏事件,即响应响应本次事件委托后,不再继续分发触屏事件到Dispatcher列表的中其他委托)。


多点触控

多点触控与单点触控类似,只不过是在触控的一串输入中,遍历这一串经行处理,在TestCpp的例子中有一个专门的例子MutiTouchTest


所用到的函数有:


ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent)

ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent)

ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent)

ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent)


void MutiTouchTestLayer::registerWithTouchDispatcher(void)
{
    CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 0);
}


相关文章:

  • Unity 游戏开发技术学生作品展2014版
  • 你好,C++(6)2.3 C++兵器谱
  • JavaScript学习笔记(九)---- BOM
  • Delphi XE7 GPS控件android下的新变化
  • 如何查找SAP的事务代码清单
  • Chart.js
  • R语言学习路线图-转帖
  • PHP面向对象之析构方法,以及关键字static
  • 1657:Distance on Chessboard 棋盘上的距离
  • Kali Linux Web 渗透测试视频教程— 第七课 OpenVas
  • 文本比较算法:计算文本的相似度
  • 手游开发者必看:手游屡遭外挂为哪般?
  • 配置 node.js 环境
  • 位图算法
  • 【BZOJ】3412: [Usaco2009 Dec]Music Notes乐谱(二分)
  • [nginx文档翻译系列] 控制nginx
  • Android框架之Volley
  • Angular数据绑定机制
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JS变量作用域
  • Vue 2.3、2.4 知识点小结
  • 二维平面内的碰撞检测【一】
  • 欢迎参加第二届中国游戏开发者大会
  • 免费小说阅读小程序
  • 区块链技术特点之去中心化特性
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 我有几个粽子,和一个故事
  • 消息队列系列二(IOT中消息队列的应用)
  • ​水经微图Web1.5.0版即将上线
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (a /b)*c的值
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (三)elasticsearch 源码之启动流程分析
  • (三)模仿学习-Action数据的模仿
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • ./和../以及/和~之间的区别
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET Core中的去虚
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net framework profiles /.net framework 配置
  • .NET 分布式技术比较
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • @ModelAttribute注解使用
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [20180129]bash显示path环境变量.txt
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [BeginCTF]真龙之力
  • [Gamma]阶段测试报告
  • [Git].gitignore失效的原因
  • [Hive] CTE 通用表达式 WITH关键字