你这个问题太大了。
先去看看文档吧:
为什么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 的, 所以我现在头都是大的, 问题出在哪呢?
是不是你的className 写错了?
Converting class name failed!
提交一个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:
什么意思
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 要怎么改
se::ScriptEngine::getInstance()->evalString("");
······
我是说判断线程的那个代码 不用判断直接调吗
那是Android
顶顶顶顶顶
大大,能否问下,在自己写的oc类中,导入头文件后#import “cocos/scripting/js-bindings/jswrapper/SeApi.h”,se命名空间变成int值的情况,我确认自己在该类里是没有命名这个se属性的。然后在AppController.mm类中导入又可以正常使用se命名空间,有点懵了,是哪里的结构出了问题吗?
问题解决了,自写的类是.m文件格式,se命名空间是c++的头文件,把后缀名改成.mm就可以了,oc代码写的很少,自己搞不拎清。
Appllication::getInstance()->getScheduler()->performFunctionInCocosThread