为Cocos2d-x项目增加lua支持

本文详细介绍了如何在Cocos2d-x项目中添加Lua支持,包括使用python创建项目,添加lua库,配置项目路径,调用lua脚本,以及在C++和Lua之间进行函数调用的方法。

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

Cocos2d-x项目增加lua支持

1.利用python创建新的项目,在cocos2d-x-2.2.3\tools\project-creator文件目录下按下shift鼠标右键打开命令窗口

2.输入命令:python create_project.py -project mygame -package com.hck.game -language cpp其中mygame是项目名称,com.hck.game是项目包名

3.新建好项目后打开mygame.sln

4.添加库项目 右击解决方案’mygame’-->添加-->现有项目,找到win32下的liblua.vcxproj,添加进来

5.添加库项目引用 右击mygame-->属性-->引用,liblua处勾上

6.添加路径 C/C++-->附加包含目录,添加该类库的路径,(你的cocos项目路径\scripting\lua$(ProjectDir)..\..\..\scripting\lua,若哪个文件找不到时,记得添加到附加包含目录里

7.链接器-->输入-->附加依赖项,添加liblua.liblua51.lib两个lib文件

8.Lua文件添加到项目的resources文件里

9.在需要读取lua脚本的cpp文件里,添加#include "cocos2dx_support/CCLuaEngine.h"

10.C++内调用lua函数

方式一:Cpp文件

CCLuaEngine* g_pEngine = NULL; //全局LUA引擎(单例)

//并在init函数里,添加

if (g_pEngine == NULL)//这样做是为了保证g_pEngine只被初始化一次

{

g_pEngine = CCLuaEngine::defaultEngine();

CCScriptEngineManager::sharedManager()->setScriptEngine(g_pEngine);

}

std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename("MyLua.lua");//LUA脚本的名字

g_pEngine->executeScriptFile(path.c_str());

 

int nResult = -1;

//执行脚本内函数 传入主LayerTag值 和 要构造节点的Tag

g_pEngine->executeGlobalFunction("add");//lua方法名字

//输出返回值

CCLOG("AddSomething Result is %d", nResult);

 

方式二:添加头文件:

extern "C" {

#include <lua.h>

#include <lualib.h>

#include <lauxlib.h>

};

注意:虽然有好几个lua.h文件,但是lua.h在附加包含目录的路径只能有一个,否则会出现方法函数不知道要找哪一个lua.h

Cpp文件

lua_State* pL = lua_open();//初始化

luaopen_base(pL);

luaL_dofile(pL, "MyLua.lua");//执行脚本

lua_getglobal(pL, "add");//执行脚本内add方法,将add函数放到栈中

lua_pushnumber(pL, 10);//传入lua方法的第一个参数

lua_pushnumber(pL, 5);//传入lua方法的第二个参数,把函数所需要的数据都放入栈中

lua_call(pL, 2, 1);//第二参数表示函数参数的个数,第二个表示返回值的个数

int iResult = lua_tonumber(pL, -1);

CCLOG("iResult = %d", iResult);//函数返回的结果

 

11.Lua调用C++函数

.hstatic int getNumber(int num);

.cpp

int HelloWorld::getNumber(int num)

{

CCLOG("getnumber!! = %d",num);

return num*num;

}

 

想在lua中调用上面的函数,就必须再多写一个函数

.hstatic int cpp_getNumber(lua_State* pL);

.cpp

int HelloWorld::cpp_getNumber(lua_State* pL)

{

int num = (int)lua_tonumber(pL, -1);//从栈顶中取一个值

lua_pushnumber(pL, getNumber(num));//调用getNumber函数,将返回值入栈

return 1;//getNumber只有一个返回值,所以return 1

}

Lualocal num = cpp_GetNumber(10);

 

Init()内需添加两个函数

 

lua_State* pL = lua_open();

luaopen_base(pL);

lua_register(pL, "cpp_getNumber", cpp_getNumber);

luaL_dofile(pL, "MyLua.lua");

lua_close(pL);

 

输出:getnumber!! = 10  //调用成功hhh

注意:两个函数都必须为静态函数哦,lua可以通过lua_registerC++的静态函数注册到lua中,这样lua就可以直接调用C++的函数啦!

cpp_GetNumber函数为什么非得是静态的,如果不是静态函数,就必须在对象被创建之后才能调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值