求教cocos creator v1.7 oc和java要怎么调用js代码

这个应该在cocos2d.h里面包含

这个是cpp基础啊,如果这都要列入文档,那么是否需要把c++语法、stl文档等等都加进我们的文档中?

其实creator中用的引擎源自于cocos2d-x,cocos2d-x总的cocos2d.h 只是包含c++核心模块,不会包含绑定相关的API,因为cpp开发者并不需要脚本绑定的东西。

这块我觉得可以把include SeApi.h 加入文档。

安卓是可以自动导入头文件,IOS不能自动导入,然后我们在不知道路径的情况下很难找到路径,虽然cocos开源,但不是都会去看源码的,我是从来都不看的,现在看来跟我一样不看源码的人不少,所以今天都卡在这个问题上了

2赞

是的 我们也是 安卓迷之崩溃有8% ios 3%-5%左右

现在看来不是我一个人的问题了,5%左右的用户经常闪退,莫名其妙的,有时都会怀疑是不是接的SDK有后门.:sweat:

std::string jsCallStr = cocos2d::StringUtils::format("%s("%s");",funcName.UTF8String, jsonStr.UTF8String);
if (std::this_thread::get_id() == Director::getInstance()->getCocos2dThreadId())
{
bool flag = se::ScriptEngine::getInstance()->evalString(jsCallStr.c_str());
if(!flag) {
NSLog(@“jsCallStr = %s”,jsCallStr.c_str());
}
}
else
{
std::string jsCallStr = “ss(cons);”;
Director::getInstance()->getScheduler()->performFunctionInCocosThread(={
bool flag = se::ScriptEngine::getInstance()->evalString(jsCallStr.c_str());
if(!flag) {
NSLog(@“jsCallStr = %s”,jsCallStr.c_str());
}
});
}

performFunctionInCocosThread([=] 少一个等于号

问一下 1.7 c++怎么调用js???

你这个问题太大了。
先去看看文档吧:

https://github.com/cocos-creator/cocos2d-x-lite/blob/develop/cocos/scripting/js-bindings/docs/JSB2.0-learning-zh.md

为什么1.70版本CCC, 新建项目后想从js调用ios, 以下是我的代码: 问题见图, 有同问的吗? 求解
1 js 端代码:

2 oc 端代码

3 报错

我的理解是 js 端调用 oc 端代码无效. 但问题是我之前把1.6.2的项目下编译的 build 文件删除后, 再用1.7重新构建编译后用 se::ScriptEngine::getInstance()->evalString(“cc.vv.anysdkMgr.bindIosSuc()”)
这个方法是有效连接了 ios 的, 所以我现在头都是大的, 问题出在哪呢?

@dumganhar 大神, 帮忙来解决下啊…

是不是你的className 写错了?
Converting class name failed!

不会啊, 这是 js 中的初始定义

然后 oc 端引入的是

提交一个demo吧。应该是使用姿势不对。

从一个项目拷贝到另一个项目,脚本和场景key相同了,新建一个脚本或场景后编辑器又得重来挂载脚本,还不知道key值是否和另一个项目相同,这样很影响脚本和场景更新,子游戏。
建议方式:1资源key用相对路径和文件名生成唯一key,例如 resource/aa.png, resource/bbb.mp3
2脚本和场景,prefab这些用内容生成唯一key,保证每个独立项目key得唯一性,不然想做大厅多子游戏的坑太多,根本没法做,编辑器不支持

不知道这个建议行不行

脚本和场景 uuid 怎么会相同呢?

请问js端的函数怎么定义呢
std::string jsCallStr = cocos2d::StringUtils::format(“Loading.onGameLoginRsp(”%s");",[string UTF8String]);
se::ScriptEngine* se = se::ScriptEngine::getInstance();
if (std::this_thread::get_id() == Director::getInstance()->getCocos2dThreadId())
{
cocos2d::log("=======1=======");
se->evalString(jsCallStr.c_str());
}
else
{
cocos2d::log("=======2=======");
Director::getInstance()->getScheduler()->performFunctionInCocosThread([=]{
se->evalString(jsCallStr.c_str());
});
}
j s:
onGameLoginRsp(loginret) {
console.log(“call from Java and IOS, onGameLoginRsp”);

}
报错
ERROR: SyntaxError: Unexpected EOF, location: (no filename):1:

什么意思

我写了一个方便的调用小框架:
https://github.com/qcdong2016/creator-native-bridge

2.0.2是不是该了 现在oc要这么调用js

if (std::this_thread::get_id() == Director::getInstance()->getCocos2dThreadId())
{
se::ScriptEngine::getInstance()->evalString(“your JS code”);
}
else
{
Director::getInstance()->getScheduler()->performFunctionInCocosThread({
se::ScriptEngine::getInstance()->evalString(“your JS code”);
});
}

这个在2.0.2没有了 @dumganhar 要怎么改