1:首先建一个cocos2dx c++项目(不是lua项目)
2:下载一个lualib.a库(支持android的),可以去c++ lua项目中找(路径:
cocos2d-x/external/lua/luajit/PRebuilt/android/armeabi/libluajit.a
放到我们的项目中,这里我直接放到jni目录下。
3:下载有关库的头文件,路径:
cocos2d-x/external/lua/luajit/include
放到我们的项目下:我的位置是jni目录(jin目录:
4:修改android.mk文件
添加:
include $(CLEAR_VARS)
4 LOCAL_MODULE := lua_static #库名称
5 LOCAL_SRC_FILES := libluajit.a #库位置
6 include$(PREBUILT_STATIC_LIBRARY)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes/
23 $(LOCAL_PATH)/luajit/include #头文件搜索路径
LOCAL_STATIC_LIBRARIES += lua_static #添加静态库
5:cpp代码
bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !Layer::init() )
{
returnfalse;
}
auto label =Label::createWithTTF(" ","fonts/Marker Felt.ttf",24);
label->setPosition(Vec2(origin.x + visibleSize.width/2,
origin.y + visibleSize.height - label->getContentSize().height));
this->addChild(label,1);
doCallLua(1,2);
std::string text;
char ch[128];
sprintf(ch,"the sum is : %d", _sum);
text = ch;
label->setString(text);
returntrue;
}
void HelloWorld::doCallLua(int a,int b)
{
/*c 调用lua 流程*/
lua_State* L = luaL_newstate();
auto data =cocos2d::FileUtils::getInstance()->getStringFromFile("testCall.lua");
luaL_loadstring(L, data.data());
int res = lua_pcall(L,0,0,0);
if (res)
{
CCLOG("44334433%d", res);
}
lua_getglobal(L, "add");
lua_pushnumber(L, a);
lua_pushnumber(L, b);
int ret = lua_pcall(L,2, 1,0);//2为参数个数,1返回值,0没有错误处理函数,ret为0成功执行
if (ret)
{
CCLOG("2323232323:%d", ret);
}
if (lua_isnumber(L, -1))
{
_sum = lua_tonumber(L, -1);
}
}
6:testCall.lua文件
function add(a, b)
return a + b
end
7:手机显示
the sum is:3
新闻热点
疑难解答