概述 
creator2.4 使用C++层的se::ScriptEngine传递消息给js,遇到的一系列问题……
求助大家
。
问题
1.C++层 cocos2d::Director找不到;
2.替换cocos2d-x引擎后creator2.4点击构建没有任何反应,连错误信息都没有……
问题溯源
在开发中需要从C++层获取一些外部的数据然后传递到js上。
实现形式应该是类似从C++层向ts传消息或者C++调用js函数。
问题触发步骤如下:
-
C++层传递消息
搜索发现都是se::ScriptEngine调用js函数的方式传递消息,如下:
**C++层代码
void FireEventToTS(const std::string& eventName, const std::string& data) {
se::ScriptEngine se = se::ScriptEngine::getInstance();
se::AutoHandleScope hs;// 获取全局对象中的 eventTarget se::Object* global = se->getGlobalObject(); se::Value eventTargetVal; global->getProperty("eventTarget", &eventTargetVal); bool isObj = eventTargetVal.isObject(); if (isObj) { // 获取 emit 方法 se::Object* eventTargetObj = eventTargetVal.toObject(); se::Value emitFunc; eventTargetObj->getProperty("emit", &emitFunc); if (emitFunc.isObject() && emitFunc.toObject()->isFunction()) { // 构造参数:事件名 + 数据 se::ValueArray args; args.resize(2); args[0].setString(eventName); args[1].setString(data); // 调用 emit se::Value ret; emitFunc.toObject()->call(args, eventTargetObj, &ret); } }}
-
js层接收消息
ts代码
const eventTarget = new cc.EventTarget()
eventTarget.on(‘some-event’, (data: string) => {
console.log(“收到 C++ 事件:”, data)
}) -
vs2019运行 se::AutoHandleScope hs报错:
C++代码在执行到这行代码时报错

具体错误
-
切换线程performFunctionInCocosThread,提示找不到cocos2d::Director
搜索发现需要切换到js线程再执行,需要这样做:
-
替换不完整的cocos2d-x引擎
发现找不到cocos2d::Director,于是去引擎里找,发现creator2.4.10的C++引擎中并没有完整的源码,比如没有CCDirector相关的头文件和CPP文件. -
下载并替换引擎为cocos2d-x-3.17.2,构建没反应
然后到creator中去替换cocos2d-x引擎,重启creator后可以运行,但构建项目时creator没反应,如图,进度条不动,没有提示

总结问题
1.采用函数FireEventToTS中的se::ScriptEngine做消息传递是否是一个合理的消息传递方式(C++=>js),作为小白不太懂,看有什么jsb自动绑定什么的。 
2.creator2.4.10替换cocos2d-x引擎为cocos2d-x-3.17.2后,无法构建。 
大佬求助~

