cocos2d js调用java_Cocos2d-JS 跨平台的调用方法

Cocos2d-JS跨平台的调用方法

首先从我们ProjectM的开发背景开始,项目采用的Cocos2d-JS 引擎是为了发布到包括Web平台,iOS,Android,Mac,Windows等全平台。理论上只需修改少量代码就可打包为原生性能表现的混合游戏,支持全平台的同时也保证性能需求。

接下来就通过在ProjectM项目接入终端统一登录库的方法来看一下终端平台不同语言之间调用。

Android终端平台

虽然使用JS开发在Web端验证之后在终端平台功能基本一致,但是终端设备上的登录模块是统一接入第三方SDK,必须针对不同平台单独接入。一般情况下第三方为了一次开发支持多个平台,业务逻辑使用C++开放,在封装成不同平台库提供接入。接下来就是接入第三方SDK库时涉及到的各种平台的调用方式。

1.1 从JS层调用到Java层

在用户点击登录按钮的时候,JS层响应点击事件然后通过系统平台的判断调用反射方法。

使用cocos2d-js 3.0以上版本中的一个新特性,在android平台上可以通过反射直接在js中调用java的静态方法:

if (cc.sys.OS_ANDROID == cc.sys.os) {

console.log("current platform is: cc.sys.OS_ANDROID");

jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "requestLogin", "(Ljava/lang/String;)V", strPlatform);

return true;

}

在jsb.reflection.callStaticMethod方法中,需要传入对应Java的类名、方法名和参数返回值类型以及参数名称。对应的AppActivity类中的方法实现如下

public static void requestLogin(final String strPlatform) {

IMLogger.d("requestLogin platform = " + strPlatform);

Bundle bundleMsg = new Bundle();

bundleMsg.putString("key", strPlatform);

// send message

Message message = s_handler.obtainMessage();

message.what = HANDLER_LOGIN_REQ;

message.setData(bundleMsg);

s_handler.sendMessage(message);

}

通过消息机制来处理请求,立即让callStaticMethod返回。如果在此处需要有UI层的界面显示,需要启用UI线程来操作

AppActivity.this.runOnUiThread(new Runnable() {

......

}

因为在android平台,cocos的渲染和JS的逻辑是在GL线程中进行的,而android本身的UI更新是在app的UI线程进行的。

1.2 从Java层到C++层

上面提到了从JS层调用到Java层方法之后&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值