微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在cocos2d-x中使用LUA

在cocos2d-x中使用LUA

1、注冊LUA脚本引擎

ccluaEngine* pEngine = ccluaEngine::defaultEngine();
ccScriptEngineManager::sharedManager()->setScriptEngine(pEngine);

2、运行一段LUA字符串

luaEngine->executeString("print(\"test executeString\\n)");

3、运行一个LUA文件

luaEngine->executeScriptFile(CCFileUtils::sharedFileUtils()->fullPathFromrelativePath("hello.lua"));

4、运行LUA中的一个全局方法

luaEngine->executeGlobalFunction("test");	// 运行LUA中的test方法


// lua function
function test()
    print("I‘m lua function")
end

5、运行LUA中的某个带參数的方法获取返回值

lua_State* state = luaEngine->getLuaState();
lua_getglobal(state, "myadd");	//查找lua_add函数,并压入栈底 
luaEngine->pushInt(5);		//函数參数1 
luaEngine->pushFloat(6.5);	//函数參数2
lua_pcall(state, 2,153);">1,153);">0);	//调用myadd函数,同一时候会对myadd及两个參加进行出栈操作,并压入返回值
float result = lua_tonumber(state, -1);	//从栈中取回返回值 
lua_pop(state,88);font-style:italic;">//清栈,因为当前仅仅有一个返回值 
printf("result is %f\n", result);


// lua function
function myadd(x, y)
    return x + y
end

6、在LUA中运行C++中的一个全局方法

1)、编写C++中的全局方法

int add(lua_State* L)
{
    int a = lua_tointeger(L,153);">1);
    int b = lua_tointeger(L,153);">2);
	
	lua_pushinteger(L, a + b);	//入栈返回值
	return 1;	//1表示压入栈数据个数 
}

2)、在C++中注冊方法

lua_register(state,"lua_add",add); // 第二个參数为将在LUA中用到的方法名,第三个參数为C++中相应的全局函数

3)、在LUA中调用方法

lua_add(2,3);

7、在LUA中调用C++的对象及对象的方法

1)、在C++中编写一个C++的类。

#ifndef _HELLO_CLASS_CTEST_
#define _HELLO_CLASS_CTEST_

#include <iostream>

class CTest
{
public:
	int v;
	
public:
	CTest() { v = 1; }
	CTest(int a) { v = a; }
	
	void test()
	{
		printf("[CTest::test]hello,tolua++|(%d).this->v);
	}

};

#endif

2)、编写PKG文件

// 假设要包括C/C++的头文件。使用 $#include "xxx.h"
// 假设要包括其他的PKG文件。使用 $pfile "xxx.pkg"
$#include "CTest.h"

class CTest
{
	int v;
	CTest();
	CTest(int a);
	void test();
};

3)、运行tolua++,生成lua_CTest.cpp文件

tolua++ -n CTest -o lua_CTest.cpp CTest.pkg

4)、将生成文件增加到project。

5)、在LUA中使用C++的CTest对象。

tolua_CTest_open(state); // 这种方法名称中的CTest取决于运行tolua++时-n后的參数 std::string str = "t = CTest:new(); t:test();"; // 当然也能够把LUA命令写到lua文件里,然后直接运行lua文件 luaEngine->executeString(str.c_str()); // 要顺利的调用到tolua_CTest_open方法,还须要把lua_CTest.cpp文件里的方法声明取出并放到合适的地方。

// TOLUA_API int tolua_CTest_open (lua_State* tolua_S);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐