Layer其实继承了触控的接口. 所以只需要重写一些函数即可.
在helloword类中重写:
virtual bool init();
/** Callback function for touch began.
*
* @param touch Touch information.
* @param unused_event Event information.
* @return if return false, onTouchMoved, onTouchEnded, onTouchCancelled will never called.
* @js NA
*/
virtual bool onTouchBegan(Touch *touch, Event *unused_event);
/** Callback function for touch moved.
*
* @param touch Touch information.
* @param unused_event Event information.
* @js NA
*/
virtual void onTouchMoved(Touch *touch, Event *unused_event);
/** Callback function for touch ended.
*
* @param touch Touch information.
* @param unused_event Event information.
* @js NA
*/
virtual void onTouchEnded(Touch *touch, Event *unused_event);
/** Callback function for touch cancelled.
*
* @param touch Touch information.
* @param unused_event Event information.
* @js NA
*/
virtual void onTouchCancelled(Touch *touch, Event *unused_event);
此时,只要这个layer在界面上,点击就会在这几个函数中响应. 即可在这里面控制精灵的移动
但是编译错误.
2>f:\cocos\p\demo\classes\gamescene.h(17): error C2061: syntax error : identifier 'Touch' (..\Classes\HelloWorldScene.cpp)
2>f:\cocos\p\demo\classes\gamescene.h(24): error C2061: syntax error : identifier 'Touch' (..\Classes\HelloWorldScene.cpp)
2>f:\cocos\p\demo\classes\gamescene.h(31): error C2061: syntax error : identifier 'Touch' (..\Classes\HelloWorldScene.cpp)
2>f:\cocos\p\demo\classes\gamescene.h(38): error C2061: syntax error : identifier 'Touch' (..\Classes\HelloWorldScene.cpp)
2>f:\cocos\p\demo\classes\gamescene.h(49): error C2143: syntax error : missing ';' before '*' (..\Classes\HelloWorldScene.cpp)
2>f:\cocos\p\demo\classes\gamescene.h(49): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (..\Classes\HelloWorldScene.cpp)
2>f:\cocos\p\demo\classes\helloworldscene.cpp(105): warning C4996: 'cocos2d::CCString': was declared deprecated
2> f:\cocos\p\demo\cocos2d\cocos\deprecated\ccdeprecated.h(1108) : see declaration of 'cocos2d::CCString'
2>f:\cocos\p\demo\classes\gamescene.h(17): error C2061: syntax error : identifier 'Touch' (..\Classes\GameScene.cpp)
2>f:\cocos\p\demo\classes\gamescene.h(24): error C2061: syntax error : identifier 'Touch' (..\Classes\GameScene.cpp)
2>f:\cocos\p\demo\classes\gamescene.h(31): error C2061: syntax error : identifier 'Touch' (..\Classes\GameScene.cpp)
2>f:\cocos\p\demo\classes\gamescene.h(38): error C2061: syntax error : identifier 'Touch' (..\Classes\GameScene.cpp)
2>f:\cocos\p\demo\classes\gamescene.h(49): error C2143: syntax error : missing ';' before '*' (..\Classes\GameScene.cpp)
2>f:\cocos\p\demo\classes\gamescene.h(49): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (..\Classes\GameScene.cpp)
2>f:\cocos\p\demo\classes\gamescene.cpp(42): error C2065: 'zxsprite' : undeclared identifier
2>f:\cocos\p\demo\classes\gamescene.cpp(43): error C2065: 'zxsprite' : undeclared identifier
2>f:\cocos\p\demo\classes\gamescene.cpp(43): error C2227: left of '->setScale' must point to class/struct/union/generic type
2> type is 'unknown-type'
2>f:\cocos\p\demo\classes\gamescene.cpp(44): error C2065: 'zxsprite' : undeclared identifier
2>f:\cocos\p\demo\classes\gamescene.cpp(44): error C2227: left of '->setPosition' must point to class/struct/union/generic type
2> type is 'unknown-type'
2>f:\cocos\p\demo\classes\gamescene.cpp(45): error C2065: 'zxsprite' : undeclared identifier
2>f:\cocos\p\demo\classes\gamescene.cpp(49): warning C4996: 'cocos2d::Layer::setTouchMode': was declared deprecated
2> f:\cocos\p\demo\cocos2d\cocos\2d\cclayer.h(181) : see declaration of 'cocos2d::Layer::setTouchMode'
2>f:\cocos\p\demo\classes\gamescene.cpp(56): error C2511: 'bool GameScene::onTouchBegan(cocos2d::Touch *,cocos2d::Event *)' : overloaded member function not found in 'GameScene'
2> f:\cocos\p\demo\classes\gamescene.h(4) : see declaration of 'GameScene'
2>f:\cocos\p\demo\classes\gamescene.cpp(57): warning C4996: 'cocos2d::CCPoint': was declared deprecated
2> f:\cocos\p\demo\cocos2d\cocos\deprecated\ccdeprecated.h(833) : see declaration of 'cocos2d::CCPoint'
2>f:\cocos\p\demo\classes\gamescene.cpp(58): error C2065: 'zxsprite' : undeclared identifier
2>f:\cocos\p\demo\classes\gamescene.cpp(58): error C2227: left of '->setPosition' must point to class/struct/union/generic type
2> type is 'unknown-type'
2>f:\cocos\p\demo\classes\gamescene.cpp(64): error C2511: 'void GameScene::onTouchMoved(cocos2d::Touch *,cocos2d::Event *)' : overloaded member function not found in 'GameScene'
2> f:\cocos\p\demo\classes\gamescene.h(4) : see declaration of 'GameScene'
2>f:\cocos\p\demo\classes\gamescene.cpp(70): error C2511: 'void GameScene::onTouchEnded(cocos2d::Touch *,cocos2d::Event *)' : overloaded member function not found in 'GameScene'
2> f:\cocos\p\demo\classes\gamescene.h(4) : see declaration of 'GameScene'
2>f:\cocos\p\demo\classes\gamescene.cpp(75): error C2511: 'void GameScene::onTouchCancelled(cocos2d::Touch *,cocos2d::Event *)' : overloaded member function not found in 'GameScene'
2> f:\cocos\p\demo\classes\gamescene.h(4) : see declaration of 'GameScene'
解决办法:
在cocos2d.h包含路径下添加USING_NS_CC即可.
#include "cocos2d.h"
USING_NS_CC;
在<权威指南>中关于注册触摸响应的方法在3.x中已经不再支持.
在权威指南中是需要重载registerWithTouchDispatcher()函数进行操作的.但我当前使用的3.12版本不再支持.
因为: 在Layer.h源码中有 final 关键字. 所以我认为应该就是不再使用.(不知道是不是这么理解)
/** If isTouchEnabled, this method is called onEnter. Override it to change the
way Layer receives touch events.
( Default: TouchDispatcher::sharedDispatcher()->addStandardDelegate(this,0); )
Example:
void Layer::registerWithTouchDispatcher()
{
TouchDispatcher::sharedDispatcher()->addTargetedDelegate(this,INT_MIN+1,true);
}
@since v0.8.0
@js NA
*/
CC_DEPRECATED_ATTRIBUTE virtual void registerWithTouchDispatcher() final {};
- cocos2d-x触摸事件优先级的探究与实践
如何让自定义Layer触发触摸事件? bool LayerXXX::init() { this->setTouchEnabled(true); CCTouchDispatcher* td = C ...
- cocos2d-x触摸事件优先级
CCTouchDispatcher是管理cocos2d-x中全部Touch事件派发的类, CCTouchDispatcher中包括了两个CCTouchHandler的列表, 分别存储Standa ...
- React-native 中的触摸响应功能
我们在做APP的时候,与桌面应用系统不同的是触摸响应. web页面对触摸响应的支持和原生的APP有着很大的差异. 基本用法 componentWillMount: function() { this. ...
- 关于cocostudio动态添加控件触摸响应无效的学习
time:2015/04/19 1. 描述 * 把studio制作的ui加载之后,动态添加事件(比如说,单点触摸),结果回调函数(eg:onTouchBegan等)根本没有响应! * 另外,网上有朋友 ...
- cocos2d-x学习记录3——CCTouch触摸响应
游戏不同于影音,强交互性是其一大特色,在游戏中主要体现为接受用户的输入并响应.智能手机触摸是其重要的输入方式. 在cocos2d-x中,触摸分为单点触摸和多点触摸. 单点触摸:主要继承CCTarget ...
- cocos2dx游戏--欢欢英雄传说--添加触摸响应
主要的调整就是将HelloWorldScene改成了MainSecne,然后将Player作为了MainScene的私有成员变量来处理.修改了人物图片,使用了网上找到的三国战纪的人物素材代替我之前画的 ...
- cocos2d-x触摸分发器原理
屏幕捕捉到触摸消息的派发流程: 如果有一个组件如果想要接收触摸事件,会通过继承一个CCTouchDelegate接口注册给CCTouchDispatcher,CCTouchDispatcher 中维护 ...
- cocos2dx 触摸钢琴
1.触摸钢琴项目描写叙述 1.1触摸钢琴功能描写叙述 实现手指点按琴键发出相应的音调,按下位置出现星云的粒子特效,滚动实现移动到别的琴键的位置,按下安卓返回键运行关闭. 1.2触摸钢琴所需技术 粒子特 ...
- 3.x的触摸响应机制
第一种是采用函数回调,主要是用于MenuItem [cpp] view plaincopy // a selector callback void menuCloseCallback(Object* ...
随机推荐
- css 布局,过渡
做了一个小案例,关于我们内边距的处理的,然后再加上一些过渡效果 效果: 具体实现重点加上这里: 具体代码实现: CSS部分: <style> #container{ border:2px ...
- trackback 捕获异常并打印
### 1 except Exception as e: print(traceback.format_exc()) def _handle_thread_exception(request, exc ...
- Flink 1.6.0 Windows操作
原文连接 https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/stream/operators/windows.html W ...
- 《DSP using MATLAB》Problem 8.43
代码: %% ------------------------------------------------------------------------ %% Output Info about ...
- 当class有多个class属性时截取操作
这里是实现以个输入对应的页码就跳转,没有或者为字符情况下弹出不存在对应页面 这里难点就是有currentPage的class属性的截取 $(document).on("click" ...
- 12-FileZilla-响应:550 Permission denied
window系统安装FileZilla与虚拟机上的Ubuntu传输文件: 状态:连接正常 问题:传输文件失败 报错:550 Permission denied 解决方法: 这是由于ftp服务器配置的问 ...
- sys_call_table HOOK
sys_call_table 这个东西,其实和 Windows 下的 SSDT 表,在功能上完全相同. 前一阵子学Linux驱动,遇到了这个系统调用表,然后我就想到Windows的SSDT表,既然SS ...
- cms系统视频分享
cms_001-CMS系统功能需求简介-1.avicms_002-如何采用用例分析方法来理解需求-1.avicms_003-后台管理系统用例-1.avicms_004-实现验证码的初步思路-1.avi ...
- 【学术篇】luogu1351 [NOIP2014提高组] 联合权值
一道提高组的题..... 传送门:题目在这里.... 现在都懒得更自己的blog了,怕是太颓废了_ (:з」∠) _ 好久没做题了,手都生了.(好吧其实是做题方面手太生了) 这题我都不想讲了,把代码一 ...
- error LNK2019: 无法解析的外部符号 __imp_recv,该符号在函数 evthread_notify_drain_default 中被引用
在Windows系统中使用libevent时,编译报错:error LNK2019: 无法解析的外部符号 __imp_recv,该符号在函数 evthread_notify_drain_default ...