oc调用js最简教程

这么重要的东西,找找找,找半天,受不了了,就个教程有那么难写吗?
功能挺好用的,就这么藏着?

HELLOWORLD项目里的HELLOWORLD的JS文件里加个函数
onOC: function() {
this.label.string = “onOC!”;
}

构建好的Xcode项目里找个地方调用这个就完事了:
ScriptingCore::getInstance()->evalString(“cc.find(‘Canvas’).getComponent(‘HelloWorld’).onOC();”, NULL);

PS:这个是C++的,所以调用的文件是.mm

王哲你们应该给我发工资~

9赞

试过了不能成功呢

.mm里要#import “ScriptingCore.h”
调用的时机要在场景加载出来之后

是这么做的,最后到了evalString这个方法里面
bool ScriptingCore::evalString(const char *string, JS::MutableHandleValue outVal, const char filename, JSContext cx, JS::HandleObject global)
{
JSAutoCompartment ac(cx, global);
JS::PersistentRootedScript script(cx);
if (script == nullptr) {
return false;
}
走到这里script是空,就停了

你用的什么版本的Creator?我在别的帖子看到1.3.0 beta版的evalString好像有问题,你试试1.2.2版本的。

。。。。1.3.0 beta7
那怎么办啊

只能是evalString部分暂时用1.2.2开发,等待1.3.0正式版修复问题咯。。。

或者你有能力去调试evalString执行为什么出错的话,也可以调试看看问题出在哪,自己改引擎代码。。。

我给你手工赞

2赞

1.3.0版本里面,把
if (script == nullptr) {
return false;
}
这个判断注释就行了

2赞

Evaluating cc.find(‘Canvas’).getComponent(‘Main’).onOC(); failed (evaluatedOK == JS_FALSE)
:1:TypeError: cc.find(…).getComponent(…) is null’

i got this error message, please help :sob:

Seems like no component found

1赞

are you 说什么?

yeah! 成功了 :yum:

// c++  某Method 
void ToneHelper::getCMD(int cmd) {
    
    auto engine = ScriptingCore::getInstance();
//    std::string ff = sprintf("cc.find('Canvas/Label').getComponent('cc.Label').string = 'HelloCocos %d'",cmd);
    std::stringstream ss;
   //  std::stringstream dd;
  //  ss << "cc.find('Canvas/Label').getComponent('cc.Label').string = 'HelloCocos " << cmd << "'";
    dd<< "cc.find('Canvas').getComponent('Bio_page').onOC(" << cmd << ")";
                                                                     //js file        //method    //value


    
//    std::string ff = "cc.find('Canvas/Label').getComponent('cc.Label').string = 'HelloCocos %d'";

    //std::string dd = "cc.find('Canvas').getComponent('Skill_page').onOC();";
    
    engine->evalString(dd.str().c_str());
    
    log("received %d",cmd);
}

//cocos creator 某 js file’

onOC :function(i){

cc.log("haha I got "+ i);

};

謝謝!!!

1赞

are you 外国 man?

我是香港人啊,但我工作的地方是用Mac的,我只會用九方輸入法,所以不用手機的時候唯有打英文 :joy:

哈哈哈,香港的朋友你好:grin:

你好!謝謝大神你的Js調用c++的教學!對我很有幫助!:smile:

:joy:额,让你见笑了,我真的不是什么大神!我就是热心的大白一个:grin:

请问 java层也可以跟这个一样么