在cocos2d-x jsb/html5中设置触摸代理的方法
和官方的说明不同,js binding的很多api和ch5版是不一样的。遇到不一样的就需要我们努力去看源码寻找了。
主要是以下几个文件
cocos2d_specifics.cpp cocos2d_specifics.hpp ScriptingCore.cpp ScriptingCore.h
好了废话不说,接下来说主题。
在ch5版本当中设置触摸代理与jsb版本的api不一样,这里以目标代理为例。
ch5版本的设置方法
cc.Director.getInstance().getTouchDispatcher().addTargetedDelegate(node, priority, true);
这样就没有问题了,没什么可说的
jsb版本的设置方法
上面那句要是放到jsb版本立马报错,告诉你这不是个function。于是我们怒看源码。
搜索一下addTargetedDelegate,在cocos2d_specifics.cpp里面找到了
void JSTouchDelegate::registerTargettedDelegate(int priority, bool swallowsTouches) { CCDirector* pDirector = CCDirector::sharedDirector(); pDirector->getTouchDispatcher()->addTargetedDelegate(this, priority, swallowsTouches); }
然后再看下哪里调用了它。
JSBool js_cocos2dx_JSTouchDelegate_registerTargettedDelegate(JSContextcx, uint32_t argc, jsval vp) { if (argc >= 1) { jsval argv = JS_ARGV(cx, vp); JSObject jsobj = NULL; JSTouchDelegate *touch = new JSTouchDelegate(); touch->autorelease(); touch->registerTargettedDelegate((argc >= 1 ? JSVAL_TO_INT(argv[0]) : 0), (argc >= 2 ? JSVAL_TO_BOOLEAN(argv[1]) : true)); jsobj = (argc == 3 ? JSVAL_TO_OBJECT(argv[2]) : JSVAL_TO_OBJECT(JSVAL_VOID)); touch->setJSObject(jsobj); JSTouchDelegate::setDelegateForJSObject(jsobj, touch); return JS_TRUE; } JS_ReportError(cx, “wrong number of arguments: %d, was expecting >=1”, argc); return JS_FALSE; }
接下来再看哪里注册了js_cocos2dx_JSTouchDelegate_registerTargettedDelegate
是的,我们找到了
JS_DefineFunction(cx, ns, "registerTargettedDelegate", js_cocos2dx_JSTouchDelegate_registerTargettedDelegate, 1, JSPROP_READONLY | JSPROP_PERMANENT);
所以我们要使用的方法就是cc.registerTargettedDelegate()了。至于参数我们可以参照上面的js_cocos2dx_JSTouchDelegate_registerTargettedDelegate方法
最后的结论,在jsb下我们应该使用
cc.Director.getInstance().getTouchDispatcher().addTargetedDelegate(node, priority, true);
整合版
为了在ch5和jsb下同样有效,我们就要在代码中判断当前平台
var addTargetedDelegate = function (node, priority){
if ("opengl" in sys.capabilities && "browser" != sys.platform){
cc.registerTargettedDelegate(priority, true, node);
}
else {
cc.Director.getInstance().getTouchDispatcher().addTargetedDelegate(node, priority, true);
}
};
好了,本文完结,标准代理和注销代理也是类似的处理方法,可以自己看。
在cocos2d-x jsb/html5中设置触摸代理的方法的更多相关文章
- AIDL通信过程中设置死亡代理
关于AIDL的使用参考学习: https://blog.csdn.net/u011240877/article/details/72765136 https://blog.csdn.net/iromk ...
- IDEA中设置注释模板的方法
IDEA中设置注释模板主要分为两个部分,分别是创建java文件时类的注释和方法的注释. 这里为大家详细介绍一下方法,按MyEclipse的风格设置(MyEclipse的请看:MyEclipse中设置注 ...
- 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问
中小研发团队架构实践之生产环境诊断工具WinDbg 生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...
- css网页中设置背景图片的方法详解
在css代码中设置背景图片的方法,包括背景图片.背景重复.背景固定.背景定位等 用css设置网页中的背景图片,主要有如下几个属性: 1,背景颜色 {">说明:参数取值和颜色属性一样 ...
- asp中设置session过期时间方法总结
http://www.jb51.net/article/31217.htm asp中设置session过期时间方法总结 作者: 字体:[增加 减小] 类型:转载 asp中默认session过期时间 ...
- Cocos2dx 3.2 节点之间相互通信与设置触摸吞噬的方法
实际开发中,我们经常会遇到这样的情况.我们有一个层layer1,这个层包含一个menu层,menu1层里又包含了一个节点按钮button1.现在需要实现一个效果:点击button1弹出一个对话框,这个 ...
- Android中设置全屏的方法
在实际的应用程序开发中,我们有时需要把 Activity 设置成全屏显示,一般情况下,可以通过两种方式来设置全屏显示效果.其一,通过在代码中可以设置,其二,通过manifest配置文件来设置全屏. 其 ...
- C#程序中设置全局代理(Global Proxy)
1. HttpWebRequest类的Proxy属性,只要设置了该属性就能够使用代理了,如下: 1 //设置代理 2 WebProxy WP = new Web ...
- [Z] C#程序中设置全局代理(Global Proxy)
https://www.cnblogs.com/Javi/p/7274268.html 1. HttpWebRequest类的Proxy属性,只要设置了该属性就能够使用代理了,如下: 1 ...
随机推荐
- JQuery - 提交表单
[JavaScript] JQuery异步提交表单与文件上传 Jquery.form.js是一个可以异步提交表单及上传文件的插件. 文档地址:http://jquery.malsup.com/form ...
- BZOJ 1877: [SDOI2009]晨跑( 最小费用最大流 )
裸的费用流...拆点, 流量限制为1, 最后的流量和费用即答案. ------------------------------------------------------------------- ...
- WCF技术剖析之三十:一个很有用的WCF调用编程技巧[上篇]
原文:WCF技术剖析之三十:一个很有用的WCF调用编程技巧[上篇] 在进行基于会话信道的WCF服务调用中,由于受到并发信道数量的限制,我们需要及时的关闭信道:当遇到某些异常,我们需要强行中止(Abor ...
- 高级特性(7)- 高级AWT
7.1 绘图操作流程7.2 形状7.3 区域7.4 笔划7.5 着色7.6 坐标变换7.7 剪切7.8 透明与组合7.9 绘图提示7.10 图像的读取器和写入器 7.10.1 获得图像文件类型的读取器 ...
- boost::share_ptr用法
boost中提供了几种智能指针方法:scoped_ptr shared_ptr intrusive_ptr weak_ptr,而标准库中提供的智能指针为auto_ptr. 这其中,我最喜欢,使用最多的 ...
- Oculus Rift DK2 安装所需电脑配置
系统支持:眼下使用的SDK0.4支持windows7,windows8,windows8.1.Mac(10.8,10.9): 硬件配置:官方给的标准配置为2.0+GHz以上CPU.2GB内存.兼容Di ...
- ASIHTTPRequest-插件的使用
链接地址:http://blog.sina.com.cn/s/blog_7b9d64af0101e5uf.html 一.什么是ASIHTTPRequest ASIHTTPRequest 插件是一个 ...
- BZOJ 3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛( dp )
水题...忘了取模就没1A了.... --------------------------------------------------------------------------- #incl ...
- java class生成jar包(转)
进入dos操作符窗口cd进入要打成jar包的class文件所有文件夹目录jar cvf [生成jar的名称.jar] [列出class文件] //若有多个,以空隔隔开 如:一.操作零散的单个或几个cl ...
- Eclipse中使用版本控制----Git
之前在做软件开发的过程中使用的版本控制软件大多是cvs,svn等等,这些都属于cvcs,及中央版本控制系统,其特点是存在一个中央库,开发者首先从中央库中下载代码,编辑,然后提交.很明显的一个特点就是使 ...