hello,大家好,问一个关于Creator2.x C++层调用ts的问题

概述 :9:
creator2.4 使用C++层的se::ScriptEngine传递消息给js,遇到的一系列问题……
求助大家 :eyes:

问题
1.C++层 cocos2d::Director找不到;
2.替换cocos2d-x引擎后creator2.4点击构建没有任何反应,连错误信息都没有……

问题溯源
在开发中需要从C++层获取一些外部的数据然后传递到js上。
实现形式应该是类似从C++层向ts传消息或者C++调用js函数。
问题触发步骤如下:

  1. 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);
     	}
     }
    

    }

  2. js层接收消息
    ts代码
    const eventTarget = new cc.EventTarget()
    eventTarget.on(‘some-event’, (data: string) => {
    console.log(“收到 C++ 事件:”, data)
    })

  3. vs2019运行 se::AutoHandleScope hs报错:
    C++代码在执行到这行代码时报错
    image
    具体错误

  4. 切换线程performFunctionInCocosThread,提示找不到cocos2d::Director
    搜索发现需要切换到js线程再执行,需要这样做:

  5. 替换不完整的cocos2d-x引擎
    发现找不到cocos2d::Director,于是去引擎里找,发现creator2.4.10的C++引擎中并没有完整的源码,比如没有CCDirector相关的头文件和CPP文件.

  6. 下载并替换引擎为cocos2d-x-3.17.2,构建没反应
    然后到creator中去替换cocos2d-x引擎,重启creator后可以运行,但构建项目时creator没反应,如图,进度条不动,没有提示
    image

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

大佬求助~

已解决! :grinning: :grinning: