cocos2dx java 调用lua_cocos2dx之C++调用Lua
1.引入頭文件
#include?"cocos2d.h"
#include?"CCLuaEngine.h"
USING_NS_CC;
using?namespace?std;
extern?"C"{
#include?"lua.h"
#include?"lualib.h"
#include?"lauxlib.h"
}
2導入Lua文件
如果是cocos2dx的Lua工程只需要在main.lua里面引用就可以了
3.Lua文件編寫
--Lua變量
strTemp?=?"樂逍遙"
--Lua的table
tableTemp?=?{name?=?"樂逍遙Jun",?uuid?=?"001"}
--沒有參數的函數
function?test()
return?100
end
--有參數的函數
function?testadd(a,b,str)
local?c?=?a+b
return?c,?str
end
4.C++中的調用
首先是找到AppDelegate.cpp中的
#if (COCOS2D_DEBUG > 0) && (CC_CODE_IDE_DEBUG_SUPPORT >0)
將 CC_CODE_IDE_DEBUG_SUPPORT的值改為0
如果是沒有參數只有一個int返回值的Lua函數只需要調用cocos2dx封裝好的executeGlobalFunction函數就行
auto?engine?=?LuaEngine::getInstance();
engine->executeGlobalFunction("test");
如果是比較負責的函數
LuaStack?*?L?=LuaEngine::getInstance()->getLuaStack();
lua_State*?tolua_s?=?L->getLuaState();
//--------有參數和返回值的Lua函數的調用---------
lua_getglobal(tolua_s,?"testadd");????//?獲取函數,壓入棧中
lua_pushnumber(tolua_s,?10);??????????//?壓入第一個參數
lua_pushnumber(tolua_s,?20);??????????//?壓入第二個參數
lua_pushstring(tolua_s,?"測試");???????//?壓入第三個參數
int?iRet=?lua_pcall(tolua_s,?3,?2,?0);//?調用函數,調用完成以后,會將返回值壓入棧中,2表示參數個數,1表示返回結果個數。
if?(iRet)???????????????????????//?調用出錯
{
const?char?*pErrorMsg?=?lua_tostring(tolua_s,?-1);
CCLOG("錯誤-------%s",pErrorMsg);
return?;
}
int?fValue?=?lua_tonumber(tolua_s,?-2);?????//獲取第一個返回值
string?str?=?lua_tostring(tolua_s,?-1);?????//獲取第二個返回值
CCLOG("有參數和返回值的Lua函數的調用---%d---,%s",fValue,str.c_str());
//--------------讀取Lua的變量------------
lua_getglobal(tolua_s,?"strTemp");
string?strTemp?=?lua_tostring(tolua_s,?-1);
CCLOG("讀取Lua的變量---%s",strTemp.c_str());
//-------------讀取Lua的table-----------
lua_getglobal(tolua_s,"tableTemp");
lua_getfield(tolua_s,-1,"name");
string?strName?=?lua_tostring(tolua_s,-1);
CCLOG("讀取Lua的table--%s",strName.c_str());
5.注意事項
1.如果你是cpp調用lua函數,那么你的這個lua函數不能是local的
總結
以上是生活随笔為你收集整理的cocos2dx java 调用lua_cocos2dx之C++调用Lua的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数学建模清风微信公众号的习题答案(基础篇
- 下一篇: 8.最大公约数和最小公倍数问题