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
新聞熱點
疑難解答