cocos lua学习笔记

本文深入探讨了使用Cocos3.7+iDE1.2结合Lua进行游戏开发时的关键技巧,包括如何加载UI、绑定C方法至Lua、调用Lua方法于C环境中,并详细介绍了Lua类的构造顺序以及全局变量的定义方式,同时展示了如何访问Lua的table。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在学习的时候用的是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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值