和官方的说明不同,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中设置触摸代理的方法的更多相关文章

  1. AIDL通信过程中设置死亡代理

    关于AIDL的使用参考学习: https://blog.csdn.net/u011240877/article/details/72765136 https://blog.csdn.net/iromk ...

  2. IDEA中设置注释模板的方法

    IDEA中设置注释模板主要分为两个部分,分别是创建java文件时类的注释和方法的注释. 这里为大家详细介绍一下方法,按MyEclipse的风格设置(MyEclipse的请看:MyEclipse中设置注 ...

  3. 中小研发团队架构实践之生产环境诊断工具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如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...

  4. css网页中设置背景图片的方法详解

    在css代码中设置背景图片的方法,包括背景图片.背景重复.背景固定.背景定位等   用css设置网页中的背景图片,主要有如下几个属性: 1,背景颜色 {">说明:参数取值和颜色属性一样 ...

  5. asp中设置session过期时间方法总结

    http://www.jb51.net/article/31217.htm asp中设置session过期时间方法总结 作者: 字体:[增加 减小] 类型:转载   asp中默认session过期时间 ...

  6. Cocos2dx 3.2 节点之间相互通信与设置触摸吞噬的方法

    实际开发中,我们经常会遇到这样的情况.我们有一个层layer1,这个层包含一个menu层,menu1层里又包含了一个节点按钮button1.现在需要实现一个效果:点击button1弹出一个对话框,这个 ...

  7. Android中设置全屏的方法

    在实际的应用程序开发中,我们有时需要把 Activity 设置成全屏显示,一般情况下,可以通过两种方式来设置全屏显示效果.其一,通过在代码中可以设置,其二,通过manifest配置文件来设置全屏. 其 ...

  8. C#程序中设置全局代理(Global Proxy)

    1. HttpWebRequest类的Proxy属性,只要设置了该属性就能够使用代理了,如下: 1             //设置代理 2         WebProxy WP = new Web ...

  9. [Z] C#程序中设置全局代理(Global Proxy)

    https://www.cnblogs.com/Javi/p/7274268.html 1. HttpWebRequest类的Proxy属性,只要设置了该属性就能够使用代理了,如下: 1        ...

随机推荐

  1. J2EE的13个规范之(二) JDBC 及其使用

    我想大家都知道ODBC是什么?ODBC(OpenDatabaseConnectivity.开放数据库互连)是微软公司开放服务结构(WOSA,WindowsOpenServicesArchitectur ...

  2. assert()用法

    assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:[1] #include <assert.h>void assert( ...

  3. 13 - NSURLConnection

    一.互联网 基本概念: HTTP协议 统一标准获取网络资源(其他设备上的东西) 本机 -> 远程服务器(计算机) URL(http有格式的字符串) 本机 <- 远程服务器(计算机) Fil ...

  4. easyUI相关知识

    $("#sportGroupInfoDialog").dialog("open");//打开一个对话框,设置这个对话框的的布局方式 $('#sportGroup ...

  5. ORA-01403: no data found

    在项目的存储过程中有这样一句话 select jgdm,jgmc into parm_mrjgdm,parm_mrjgmc From BL_KHXX  where jgdm=PARM_JGDM; 每次 ...

  6. Oracle闪回flashback总结

    1.说明: Ø  采用的技术. 使用的是多个技术. 1.      闪回日志 2.      回收站 3.      回滚段 无法使用回收站的操作 Drop table xxx purge; Drop ...

  7. JQuery获取与设置HTML元素的值value

    JQuery获取与设置HTML元素的值value 作者:简明现代魔法图书馆 发布时间:2011-07-07 10:16:13 20481 次阅读 服务器君一共花费了13.221 ms进行了6次数据库查 ...

  8. 杂题_POJ上的过桥问题

    本文出自:http://blog.csdn.net/svitter 过桥问题解释:一条船能够坐两个人,可是有非常多人要过河,所以送过一个人去,还有一个人还要回来接.使全部人过河之后时间最短,怎样求? ...

  9. java--socket实现一个client像还有一个client发送信息

    首先建立接收方socket服务端 package com.haier.socket.server; import java.io.BufferedReader; import java.io.Inpu ...

  10. asp.net2.0安全性(2)--用户个性化设置(2)--转载来自车老师

    上一篇我们用Profile.age等方式可以读取用户的年龄和其它的信息,但有的时候我们要查询显示所有用户的信息,但asp.net没有提供查询所有用户信息的功能,我们只能对现有的用户逐一查询其Profi ...