cocos lua学习笔记

前端之家收集整理的这篇文章主要介绍了cocos lua学习笔记前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

现在学习的时候用的是cocos3.7 + ide1.2


在lua里面,c++的方法和类基本上都在cc.和ccs. ccui.里面,可尝试cc.Sprite,ccs.GUIReader,ccui.Button


加载ui:

local widget = cc.CSLoader:createNode("AttributePanel.csb")


绑定c方法到lua,给lua调用


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")


c调用lua方法


比如我有以下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

猜你在找的Cocos2d-x相关文章