cocos2dx中js绑定的回调

本文详细介绍了如何将CCPomelo与JavaScript进行集成,并提供了实例代码及使用方法,包括对象初始化、方法调用及回调函数的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇,写了个CCPomelo导出到js,一直研究怎么写回调,研究了半天也没找到哪里可以自动生成代码了,看了半天源码,只好手动添加代码,在自动生成的 中修改

CCPomelo增加几个成员

 

class CCPomelo : public cocos2d::CCObject
{
public:
 CCPomelo(){};
 ~CCPomelo(){};

 int connect(const char* addr, unsigned short port);

 int request(const char* route, const char* msg);

 virtual void onRequestCallback(int status, const char* msg);

 void log(const char* pszLog);

 static CCPomelo* getInstance();
 JSContext *m_jsCx;
 JSObject *m_jsThisObj;
 jsval m_jsFun;
 jsval *m_jsArgv;
protected:
 void* m_client;

protected:
 static CCPomelo* m_pInstance;
};

JSBool js_cocos2dx_extension_CCPomelo_request(JSContext *cx, uint32_t argc, jsval *vp)
{
 jsval *argv = JS_ARGV(cx, vp);
 JSBool ok = JS_TRUE;
 JSObject *obj = JS_THIS_OBJECT(cx, vp);
 js_proxy_t *proxy; JS_GET_NATIVE_PROXY(proxy, obj);
 CCPomelo* cobj = (CCPomelo *)(proxy ? proxy->ptr : NULL);
 JSB_PRECONDITION2( cobj, cx, JS_FALSE, "Invalid Native Object");
 if (argc == 3) {
  const char* arg0;
  const char* arg1;
  jsval arg2;
  std::string arg0_tmp; ok &= jsval_to_std_string(cx, argv[0], &arg0_tmp); arg0 = arg0_tmp.c_str();
  std::string arg1_tmp; ok &= jsval_to_std_string(cx, argv[1], &arg1_tmp); arg1 = arg1_tmp.c_str();
  //************添加的部分

  cobj->m_jsCx = cx;//js上下文
  cobj->m_jsThisObj = obj;//js对象指针
  cobj->m_jsFun = argv[2];//回调函数

//************结束
  JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments");
  int ret = cobj->request(arg0, arg1);
  jsval jsret;
  jsret = int32_to_jsval(cx, ret);
  JS_SET_RVAL(cx, vp, jsret);
  return JS_TRUE;
 }

 JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 3);
 return JS_FALSE;
}

在CALLBACK里面调用JS函数

void CCPomelo::onRequestCallback(int status, const char* msg)
{
 CCLog(msg);
 jsval v1,v2;
 JS_CallFunctionValue(m_jsCx ,m_jsThisObj, m_jsFun, 0, &v1, &v2);
}

 

JS代码:

cc.Pomelo.getInstance().connect("127.0.0.1", 3010);
  cc.Pomelo.getInstance().request("connector.helloHandler.hi", "{'msg' : 'hi~'}".replace(/'/g,"\""), this.onCallback);

onCallback: function () {
  cc.Pomelo.getInstance().log("Pomelo onCallback");
 },

 

转载于:https://my.oschina.net/u/816723/blog/138949

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值