步骤:
1、安装必要的库和工具包,以及配置相关环境变量,请按照cocos2d-x-3.0rc0\tools\tolua\README.mdown说得去做
(注意:尽量用README.mdown说的同一个ndk版本(最好用9系列),不然需要改东西,NDK各个版本链接)
2、写c++类(我测试用的是cocos2d-x-3.0rc0\tests\lua-empty-test\project\Classes\自定义.cpp)

注意:你写的方法一定要public,不然不会编译到lua,会报错attempt to call method ‘方法名’ (a nil value)
注意:在xcode写c++类的时候,如果包含路径一定要写完,xcode不会报错,但是tolua是就会又问题了!(TranslationUnitLoadError: Error parsing translation unit.)

注意:如果自定义的类别里有自行定义的 namespace 时,跑 .bat 后看 output log 的最后一行会发现这样的错误:

Exception: The namespace (Evo::TalkWidget) conversion wasn’t set in ‘ns_map’ section of the conversions.yaml

去找一下 conversions.yaml 这个档,位置应该在 /tools/bindings-generator/targets/lua 底下,直接用文字编辑器打开来看。

把自订的 namespace 加到 ns_map 的变数中,那个 .ini 里的 cpp_namespace 作用

要加的内容如下:


ns_map:
“cocos2d::extension::”: “cc.”
“cocos2d::ui::”: “ccui.”
“cocos2d::”: “cc.”
“spine::”: “sp.”
“cocostudio::”: “ccs.”
“cocosbuilder::”: “cc.”
“CocosDenshion::”: “cc.”
3、写一个生成的python脚本,你不会写,没关系,我们会照着葫芦画瓢
1)进入目录cocos2d-x-3.0rc0\tools\tolua,复制一份genbindings.py,命名为genbindings_myclass.py
2)把生成目录制定到咱工程里去,打开genbindings_myclass.py把

output_dir = '%s/cocos/scripting/lua-bindings/auto' % project_root

改成

output_dir = '%s/tests/lua-empty-test/project/Classes/auto' % project_root

3)修改命令参数,把

cmd_args = {'cocos2dx.ini' : ('cocos2d-x', 'lua_cocos2dx_auto'), \'cocos2dx_extension.ini' : ('cocos2dx_extension', 'lua_cocos2dx_extension_auto'), \'cocos2dx_ui.ini' : ('cocos2dx_ui', 'lua_cocos2dx_ui_auto'), \'cocos2dx_studio.ini' : ('cocos2dx_studio', 'lua_cocos2dx_studio_auto'), \'cocos2dx_spine.ini' : ('cocos2dx_spine', 'lua_cocos2dx_spine_auto'), \'cocos2dx_physics.ini' : ('cocos2dx_physics', 'lua_cocos2dx_physics_auto'), \}
改成
cmd_args = {'myclass.ini' : ('myclass', 'lua_myclass_auto') }
4)这时你可能问myclass.ini在哪啊,我们下来就写这个文件。原理一样,我还是照着葫芦画瓢,拿cocos2dx_spine.ini改的。
[myclass]
# the prefix to be added to the generated functions. You might or might not use this in your own
# templates
prefix = myclass# create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`)
# all classes will be embedded in that namespace
target_namespace =android_headers = -I%(androidndkdir)s/platforms/android-14/arch-arm/usr/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.7/libs/armeabi-v7a/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.7/include
android_flags = -D_SIZE_T_DEFINED_clang_headers = -I%(clangllvmdir)s/lib/clang/3.3/include
clang_flags = -nostdinc -x c++ -std=c++11cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/2d -I%(cocosdir)s/cocos/base -I%(cocosdir)s/cocos/ui -I%(cocosdir)s/cocos/physics -I%(cocosdir)s/cocos/2d/platform -I%(cocosdir)s/cocos/2d/platform/android -I%(cocosdir)s/cocos/math/kazmath -I%(cocosdir)s/extensions -I%(cocosdir)s/external -I%(cocosdir)s/cocos/editor-support -I%(cocosdir)scocos_flags = -DANDROID -DCOCOS2D_JAVASCRIPTcxxgenerator_headers =# extra arguments for clang
extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s# what headers to parse
headers = %(cocosdir)s/tests/lua-empty-test/project/Classes/HelloWorldScene.h# what classes to produce code for. You can use regular expressions here. When testing the regular
# expression, it will be enclosed in "^$", like this: "^Menu*$".
classes = HelloWorld# what should we skip? in the format ClassName::[function function]
# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also
# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just
# add a single "*" as functions. See bellow for several examples. A special class name is "*", which
# will apply to all class names. This is a convenience wildcard to be able to skip similar named
# functions from all classes.skip =rename_functions =rename_classes =# for all class names, should we remove something when registering in the target VM?
remove_prefix =# classes for which there will be no "parent" lookup
classes_have_no_parents =# base classes which will be skipped when their sub-classes found them.
base_classes_to_skip = Ref ProcessBase# classes that create no constructor
# Set is special and we will use a hand-written constructor
abstract_classes =# Determining whether to use script object(js object) to control the lifecycle of native(cpp) object or the other way around. Supported values are 'yes' or 'no'.
script_control_cpp = no
改的时候要注意这些行
[myclass]
prefix = myclass
target_namespace =
headers = %(cocosdir)s/tests/lua-empty-test/project/Classes/HelloWorldScene.h
classes = HelloWorld
skip =
abstract_classes =

4、下面要自动生成代码了,打开命令行工具,cd到cocos2d-x-3.0rc0\tools\tolua下,敲入

python genbindings_myclass.py

回车运行。如果前面没问题的话你会在cocos2d-x-3.0rc0\tests\lua-empty-test\project\Classes多了一个文件夹auto,然后把里面生成lua_myclass_auto.cpp和lua_myclass_auto.hpp加入拽如工程

5、把我们生成的个module在脚本引擎初始化的时候加入lua。
编辑AppDelegate.cpp,包含lua_myclass_auto.hpp头文件,在

LuaEngine* engine=LuaEngine::getInstance();

后面加入

register_all_myclass(engine->getLuaStack()->getLuaState());

6、编译运行。这样HelloWorld这个类就被导出到lua了。

最后调用

 local hello = HelloWorld:create()local sceneGame = cc.Scene:create()sceneGame:addChild(hello)cc.Director:getInstance():runWithScene(sceneGame)

cocos2dx tolua ++ 使用 常见得错误相关推荐

  1. 浅显易懂 Makefile 入门 (12)— Makefile 常见的错误信息

    1. 常见的错误信息 make 执行过程中所产生错误并不都是致命的,特别是在命令行之前存在 -.或者 make 使用 -k 选项执行时. make 执行过程的致命错误都带有前缀字符串 ***.错误信息 ...

  2. PCL安装常见的错误集合解决方案(一)

    常见的错误集合解决方案(一) No.1 提示错误 'Microsoft.VC90.CRT,version="9.0.21022.8" 把Microsoft.NET Framewor ...

  3. 常见 Datagrid 错误

    Marcie Robillard DatagridGirl.com Datagrid 控件是 Microsoft® ASP.NET 中功能最强.用途最广的 Web 控件之一,这一点已经得到了 ASP. ...

  4. 8种常见SQL错误用法

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 来源:https://dwz.cn/cgAPOWPx 1.LIMIT 语句 分页查询是最常用的 ...

  5. php中常见的错误类型有,JavaScript中常见的错误类型有哪些?(详细介绍)

    在JavaScript中,当发生错误时会生成描述错误类型的错误对象,此错误对象包含错误类型和编号等信息,这些信息可用于后续处理等,在本篇文章中将给大家介绍常见的错误类型以及如何处理这些错误. Java ...

  6. 你应该避免的8种常见SQL错误用法!

    来源:https://dwz.cn/cgAPOWPx 1.LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方. 比如对于下面简单的语句,一般 DBA 想到的办法是在 type ...

  7. Nginx常见的错误及解决方法

    1.Nginx 常见启动错误 有的时候初次安装nginx的时候会报这样的错误 sbin/nginx -c conf/nginx.conf 报错内容:sbin/nginx: error while lo ...

  8. 《C语言程序设计:问题与求解方法》——3.9节常见编程错误

    本节书摘来自华章社区<C语言程序设计:问题与求解方法>一书中的第3章,第3.9节常见编程错误,作者:何 勤,更多章节内容可以访问云栖社区"华章社区"公众号查看 3.9 ...

  9. 初学Python常见异常错误,总有一处你会遇到!

    初学Python常见异常错误,总有一处你会遇到! 参考文章: (1)初学Python常见异常错误,总有一处你会遇到! (2)https://www.cnblogs.com/xxpythonxx/p/1 ...

最新文章

  1. 图表示学习+图神经网络:破解AI黑盒,揭示万物奥秘的钥匙!
  2. uni-app编译配置
  3. vc++实现avi文件的操作 用于视频解析及录制(转)
  4. » Markdown/reST 编辑器 ReText 3.0 发布 Wow! Ubuntu
  5. Java加密与解密的艺术~数字证书~证书使用keytool
  6. Spring的@Scheduled注解实现定时任务
  7. java 文件大小统计工具类_Java获取文件大小,文件夹内文件个数的工具类
  8. 首次安装Linux,配置网络、换源一步到位
  9. ICDAR2017 Competition on Reading Chinese Text in the Wild(RCTW-17) 介绍
  10. ABAP中的枚举对象
  11. Dmoz中文目录收录的中文博客
  12. QQ桌球瞄准器开发(3)绘制瞄准线及母球
  13. css 文字发光效果
  14. 一只小蜜蜂(C语言)
  15. 生死看淡,不服就GAN
  16. EMC 设计经验总结
  17. 你有“隐私泄露担忧”吗?适合普通用户的6个方法来了
  18. 教你一招搞定 GitHub 下载加速!
  19. 海信智慧黑板Android版本,海信推出智慧黑板来打造沉浸式智慧课堂,保护视力让学生爱上上课...
  20. Photoshop文字之——制作斑驳铁锈文字

热门文章

  1. odoo前端文字强制不换行
  2. pandas-新手使用教程
  3. oracle查询大文本类型转化为string
  4. 小程序获取用户所在城市完整代码详解(附源码)
  5. 资源分享 | 平面设计 | 平面设计视频教程
  6. angularJs实现排序效果
  7. 计算机软件主要是由什么组成,计算机软件系统由什么组成
  8. webgl中加载模型要求以及优化方案
  9. 关于使用海康相机SDK采集图片并传递给C++的使用总结
  10. js 月份间隔计算器_js实现简单计算器