现在学习的时候用的是cocos3.7 + ide1.2
在lua里面,c++的方法和类基本上都在cc.和ccs. ccui.里面,可尝试cc.Sprite,ccs.GUIReader,ccui.Button
加载ui:
local widget = cc.CSLoader:createNode("AttributePanel.csb")
lua_register(L,"cocosLog",cocosLog);//绑定
但是说绑定的c方法必须按一定格式来写,参考下面
这里用了静态方法
static int LuaBridge::cocosLog(lua_State* L)
{
cocos2d::log(lua_tostring(L,1));
return 0;
}
必须有返回值且返回什为int类型,参数列表里只有一个参数,如上
然后,你在lua里面就可以这么调用 了:
cocosLog("test out")
比如我有以下lua文件:
test.lua
function testfunc(param1,param2)
local oustring = string.format("txt out:%d--%s",param1,param2:getName())
cocosLog(outstring)
end
注意这里是一个全局方法,其实cocos已经帮我们做好了一些东西,首先你要做的是先执行这个文件,目的是让这个方法进入全局变量
可以这样执行:
LuaEngine::getInstance()->executeScriptFile("test.lua");
完了之后你就可以调用了,怎么调,看下面:
lua_getglobal(LuaEngine::getInstance()->getStack()->getLuaState(),"testfunc");//选取方法
LuaEngine::getInstance()->getStack()->pushnumber(20);
LuaEngine::getInstance()->getStack()->pushobject(this,"cc.Node");
lua_call(LuaEngine::getInstance()->getStack()->getLuaState(),2,0);//这里第二个参数是传给lua的参数有几个,第三个是lua返回几个参数
然后你就可以看到打钱出:txt out:20--[结点的名字]
lua类的构造顺序:
取得原先实例之后先调用create方法,此方法后会调用new()方法,new()方法里会调用ctor()方法,ctor方法我们可以自己重写
cocos lua定义新的全局变量:
由于cocos lua框架限制了直接定义全局变量的方法,所以要用其它方法,
这里cocos lua已有提供:
cc.exports.myglobal = "hello"
这名之后你就可以直接访问了:
print(myglobal)--->输出:hello
访问lua的table
假如lua里面有如下全局table
mytable = {
param1 = 52,
param2 = "abc"
}
那么在c里面可以这样访问:
lua_getglobal(L,"mytable");
lua_getfield(L,-1,"param1");
float p1 = lua_tonumber(L,-1);
lua_getfield(L,-2,"param2");//这里因为上一次的getfield进了一次栈,所以mytable到了-2的位置
string str = lua_tostring(L,-1)
原文链接:https://www.f2er.com/cocos2dx/341589.html