【已解决】quickcocos2dx3.3自定义C++类导出的lua如何在项目中使用,直接用会报错呢

先上环境:Windows7 + Cocos2dx3.2 + quickcocos2dx3.3 + Sublime + python2.7.3

在项目路径E:\projecttest\second\frameworks\runtime-src\Classes下添加了自定义类MySprite.h 和 MySprite.cpp,接着通过添加custom_api.ini, 修改genbindings.py.然后终端运行genbindinggs.py得到了
lua_custom_api_auto.cpp , lua_custom_api_auto.hpp ,lua_custom_api_auto_api.lua 和MySprite.lua。一切都很顺利。

接着就将自定义C++类注册到lua。步骤都是按官方教程http://cn.cocos2d-x.org/tutorial/show?id=1749
完成的。编译都过了。

但是在MainScene的ctor()中添加local a = my.MySprite.createMS(“icon.png”)进行测试时就报错了

:15: error in function ‘lua_custom_api_MySprite_createMS’.
argument #1 is ‘string’; ‘MySprite’ expected.

求给个使用的方法,刚学quick-lua望指教。

最后附上custom_api.ini文件内容,由于不能上传只能直接粘了。。。

the prefix to be added to the generated functions. You might or might not use this in your own

templates

prefix = custom_api

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 = my

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 -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.8/include
android_flags = -D_SIZE_T_DEFINED_

clang_headers = -I%(clangllvmdir)s/lib/clang/3.3/include
clang_flags = -nostdinc -x c++ -std=c++11 -U SSE

cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/platform/android -I%(cocosdir)s/cocos/editor-support -I%(cocosdir)s/external
cocos_flags = -DANDROID

cxxgenerator_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/…/runtime-src/Classes/MySprite.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 = MySprite.*

what should we skip? in the format ClassName::

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 =

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

你再写一个用INT做参数的,然后再试试

local a = my.MySprite:createMS(“icon.png”)
用:

那个int getNum()的也试过了没用的……

跟你一样错误。

没效果…… :2:

求解决。。。

@lanbo张,
1.你绑定文件的ini是怎么配制的?
2.换成’local a = my.MySprite:createMS(“icon.png”)’,后没有效果,有出错log吗?

按照这个配的http://cn.cocos2d-x.org/tutorial/show?id=1749你自己看看吧

我也是这个问题,楼主解决了吗?

楼主解决了吗?我也是这个问题~求教啊!!