因为某些原因需要js调用c++,昨天踩了一天坑,今天写个攻略步骤记录下。
目前已经跑通了基础绑定,可以通过c++ 调用window的权限。
我的vs是2017
cocos 是2.4.12
1、环境配置
1):python2.7 32位 python 2.7.5 X86 Window 这个安装在C盘E盘都无所谓,自己喜欢安装在哪里就安装在哪里。
安装好以后记得配置环境变量,路径是你这个Python安装的目录,比如你是安装在C:\Python2.7 那么在环境变量path 就添加这个C:\Python2.7。
2):PyYAML PyYAML-3.11.win32-py2.7.zip (272.6 KB)
这个文件解压在你python的安装目录下的\Lib\site-packages
比如你还是安装在C:\Python2.7 那么把pyyaml解压出.exe 应用程序后。
双击解压出来的exe 是这个界面
点击 下一步 这是我的安装目录,但是格式是一样的。
Python Directory: C:\Python2.7
Installation Directory: C:\Python2.7\Lib\site-packages
然后在下一步就可以了。
3):Cheetah Cheetah-2.4.4.zip (181.6 KB)
感谢大佬提供,pyyaml和cheetah都是从这里找到的,2.7的pip 已经没办法下东西了,很离谱。
解压出来后是 Cheetah-2.4.4.tar压缩文件,这个文件直接提取到 Python安装目录\Lib\site-packages
你就会得到这个文件夹 Cheetah-2.4.4
进入这个Cheetah-2.4.4夹执行命令 python .\setup.py install
如果没有日志输出,记得去配置python的环境变量,上面已经写了。
如果有日志输出,执行结束,你在Python安装目录\Lib\site-packages 就会出现Cheetah这个文件夹
4):ndkr14b ndk-r14b-windows,官方教程里给的darwin的不是windows,也很离谱!
ndk 下载好以后,解压到哪里都无所谓。我是解压到E盘,我的E盘是我存放工具的,看大家自己喜好。
我的路径是E:\NDK\android-ndk-r14b
5):配置 PYTHON_BIN NDK_ROOT
打开环境变量,新建两个系统变量 一个是 PYTHON_BIN 值位 Python安装目录\python.exe 第二个是NDK_ROOT 值为 自己的解压目录E:\NDK\android-ndk-r14b
以上环境变量就配置好了.
2.自动绑定jsb
大家先新建个hello world项目,然后打开构建
发布平台:window 模板:default 其他默认 点击构建。
构建完毕后进入 编辑器的根目录下的\resources\cocos2d-x这个目录,找到tools这个文件夹
复制这个文件夹,粘贴到这个路径,图片里的tools是我粘贴过后才有的,项目构建是没有的
hello world项目下\build\jsb-default\frameworks\cocos2d-x
然后把tools->toojs目录里面的文件全部删除,把我们自己要绑定的jsb文件放进来
jsbTest.zip (4.1 KB)
自己解压到tojs目录,这个userconf.ini是执行python后自己生成的,默认是没有的
我们在这里面编译后他会自己输出到对应的文件夹,就不需要我们自己再去从引擎那边copy过来了。
解压好以后,tojs这个目录下打开命令行 执行python .\genbindings_temp.py
如果你看到Generating javascript bindings succeeds输出,代表绑定成功,配置生成好了。
3.配置vs
然后我们开始把绑定的代码,添加到vs工程里。
我们进入 hello world项目内的\build\jsb-default\frameworks\runtime-src\proj.win32这个文件夹,双击打开hello_world.vcxproj
如果有弹窗就点是,或者确定。
打开成功后,如果右测没有 解决资源方案管理器则在这里打开。
然后我们开始添加现有项 右键Class
我们选择你hello world目录下的路径,jsbTest是我的项目目录,添加这2个。
在右键libcocos2d,添加现有项
路径也是你的 项目目录下的,这个两个jsb文件,这是我们刚才python生成的,如果你想知道api,这个目录有个文件夹,存放了生成的jsb的js.api
把这2个添加好以后
我们开始注册绑定我们的c++代码,进入这个文件夹
输入这行代码 #include “jsb_jsbTest_auto.hpp”
然后往下滑动注册我们的jsb 这个位置没讲究 我随便选的
se->addRegisterCallback(register_all_jsbTest);
绑定结束,这个是我们如果编译,就会发现libcocos2d会编译失败,提示找不到 “jsbTest.h”。
双击jsb_jsbTest_auto.cpp
我们也能看到他是红色波浪线,代表找不到.h。我是配置好了,才不红
打开属性界面
点编辑
滑动到最后,看到空白的地方,把这段代码加上去
$(EngineRoot)…\runtime-src\Classes
然后确定 应用 确定。
等一会,如果#include "jsbTest.h"还是红色波浪线,别着急,删除这段自己手动输入
好了,到此自动绑定结束。
我们就可以在cocos 代码里调用我们绑定的函数了。
自己在cocos创建个脚本 我喜欢ts,输入这段,然后重新构建下。
点击编译
可以看到我们打印的log出来了,代表绑定成功。
如果提示找不到 msvcr的 dll msvcr 这个帖子有库,直接下下来放到 release.win32和debug.win32目录内就行。
参考了官方教程和大佬的教程,终于搞完了,昨天绑定了一天。第一次搞c++太惨了。