使用cocos2d-x 3.x lua 开发时 lua与c++交互
来源:互联网 发布:python isupper函数 编辑:程序博客网 时间:2024/06/05 21:16
本文在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()
{
CC_SAFE_DELETE(_shared);
_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, "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, "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 lua与c++简单交互
- cocos2d-x lua开发
- cocos2d-x 与 lua
- Cocos2d-x 3.x游戏开发之旅---<Lua与C++>
- Cocos2d-x Lua 开发环境
- 在VS2010下cocos2d-x与Lua的交互
- 【cocos2d-x 3.5】Lua与C++简单交互
- 在MAC下 配置lua开发环境与Cocos2d-X创建项目使用Lua
- cocos2d-x 与lua 通讯
- cocos2d-x lua与sqlite3
- cocos2d-x 中使用lua
- Cocos2d-x lua shader使用
- Cocos2d-x lua 使用定时器
- cocos2d-x lua 使用ListView
- 【Cocos2d开发】 论Cocos2d-x+JS/Lua
- cocos2d-x中lua与C++,C语言互相调用
- 二、如何使用Lua开发配合cocos2d-x开发游戏
- C文件读写函数介绍
- LeetCode:Reverse Integer
- spring3 mvc与struts2比较
- Windows常用键
- 函数的末尾
- 使用cocos2d-x 3.x lua 开发时 lua与c++交互
- 【Ruby】Ruby框架的使用(Ruby on Rails项目结构分析)
- Win7+VS2010环境下CEGUI 0.8.4编译过程详解
- Ajax响应中文乱码 [SpringMVC使用@ResponseBody处理Ajax请求]
- meta标签中的http-equiv属性使用介绍
- android的Menu使用
- 利用mysql游标循环结果集
- android camera系统介绍(kernel部分)
- MySQL数据库备份 导出