cocos2d-lua C++ 调用 lua

我之前看了一下lua 到C的调用,在好奇心的驱使下,如何从C到lua这个问题,看了一下网上的教程,会有一些文档是这么说的:

LuaEngine* engine = LuaEngine::getInstance();
int num = engine->executeGlobalFunction("helloLua");

CCLOG("Test end:%d", num);

helloLua是在lua中的全局函数:

function helloLua()
	print("helloLua");
	return 100;
end

好了,就这么简单,运行一下,看一下结果:

嗯,好了是不是感觉很简单,是的,网上的教程一般都是说的是这种无参数的调用,可是我还想知道如何传参使用呢。

如果想传参数,那么就需要这样写:

    auto engine = LuaEngine::getInstance();
	lua_State* L = engine->getLuaStack()->getLuaState();
	lua_getglobal(L, "helloLua"); //method name
	if (!lua_isfunction(L, -1))
	{
		CCLOG("[ERROR] helloLua should be a function! Please define as a global function in lua");
		lua_pop(L, 1);
		return;
	}

	lua_pushnumber(L, 66);  //first params number
	lua_pushinteger(L, 88); //second params int   

	int numArgs = 2; //arg number
	int num = engine->getLuaStack()->executeFunction(numArgs);

	CCLOG("Test end:%d", num);

我的lua代码是这样的:

function helloLua(a,b)
	print("helloLua",a,b); 
	return a+b;
end

这里有一点需要注意一点,lua中的函数如果你想传参数进去,形参和实参必须数量保持一致,要不然就会找不到这个函数,这个从C++的角度也是很好理解的。好了,运行一下看下结果:

从结果上看,我是调用成功了,如果你还想传其他的参数或者,可以查看一下源码,修改参数类型。

猜你喜欢

转载自blog.csdn.net/pyf_914406232/article/details/96101431
今日推荐