大佬教程收集整理的这篇文章主要介绍了使用cocos2d-x 3.x lua 开发时 lua与c++交互,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
本文在himi的文章上简单加了些自己的理解:himi文章链接:http://blog.csdn.net/xiaominghimi/article/details/8816887
下面直接上代码:
.h文件
#include "cocos2d.h"
#include "CCLuaENGIne.h"
using namespace cocos2d;
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
};
class Lua_callCppTest
public:
static Lua_callCppTest* geTinstance();
//将需要被调用的函数注册到lua里
void callCppFunction(lua_State* ls);
//需要被调用的函数
static int cppFunction(lua_State* ls);
private:
static Lua_callCppTest* _shared;
const char* getFileFullPath(constchar* fileName);
~Lua_callCppTest();
};
--------------------------.cpp文件
#include "Lua_callCppTest.h"
Lua_callCppTest* Lua_callCppTest::_shared =nullptr;
const char* Lua_callCppTest::getFileFullPath(const char* fileName)
returnFileUtils::geTinstance()->fullPathForFilename(fileName).c_str();
}
Lua_callCppTest::~Lua_callCppTest()
_shared = nullptr;
}
Lua_callCppTest* Lua_callCppTest::geTinstance()
if (_shared == nullptr)
_shared = newLua_callCppTest();
}
return_shared;
}
void Lua_callCppTest::callCppFunction(lua_State* ls)
//把需要被调用的方法注册到lua里
lua_register(ls,@H_489_305@"cppFunction",cppFunction);
}
int Lua_callCppTest::cppFunction(lua_State* ls)
//取出从lua中返回的参数
int luaNum = (int)lua_tonumber(ls,1);
log("Lua_callCpp从lua 函数中获得的参数: %d",luaNum);
//将需要的参数传入lua中
lua_pushString(ls, @H_489_305@"li yue");
//返回给lua值的个数
return 1;
}
----------------lua文件
local function main()
collectgarbage("collect")
-- avoid memory leak
collectgarbage("setpause",100)
collectgarbage("setstepmul",5000)
cc.FileUtils:geTinstance():addSearchPath("src")
cc.FileUtils:geTinstance():addSearchPath("res")
local director = cc.Director:geTinstance()
director:getOpenGLView():setDesignResolutionSize(640,1136,cc.ResolutionPolicy.EXACT_FIT)
--create scene
local scene = require("GameScene")
local gameScene = scene.create()
if cc.Director:geTinstance():getRunningScene() then
cc.Director:geTinstance():replaceScene(gameScenE)
else
cc.Director:geTinstance():runWithScene(gameScenE)
end
-- lua里直接调用c++函数
local num = cppFunction(1234)
print("从cpp函数中获得的返回值:",num);
end
----------------------
AppDelegate.cpp里的调用
bool AppDelegate::applicationDidFinishLaunching()
auto ENGIne = LuaENGIne::geTinstance();
ScriptENGIneManager::geTinstance()->setScriptENGIne(ENGInE);
//这里要注意执行代码的顺序,应该先调用这个方法
Lua_callCppTest::geTinstance()->callCppFunction(ENGIne->getLuaStack()->getLuaState());
if (ENGIne->executeScriptFile("src/main.lua"))
return false;
}
return true;
}
----------------------
打印结果:
cocos2d: Lua_callCpp 从lua函数中获得的参数: 1234
cocos2d: [LUA-print] 从cpp函数中获得的返回值:li yue
以上是大佬教程为你收集整理的使用cocos2d-x 3.x lua 开发时 lua与c++交互全部内容,希望文章能够帮你解决使用cocos2d-x 3.x lua 开发时 lua与c++交互所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。