游戏引擎加入lua

阅读: 评论:0

游戏引擎加入lua

游戏引擎加入lua

游戏引擎加入lua 为了让游戏实现热更新,决定引入lua来开发游戏。游戏的主框架是c++,lua调用c++直接用tolua++就行了。lua的解析为了加快速度,我决定使用luajit,当然也可以实用luaC来做。
#pragma once
#include "base/Singleton.h"
#include "string"
extern "C" {
#include "external/luajit/include/lua.h"
#include "external/luajit/include/lualib.h"
#include "external/luajit/include/lauxlib.h"
}
namespace cloud
{	class LuaEngine: public Singleton<LuaEngine>{public:DECLARE_SINGLETON_CREATE_DESTROYLuaEngine();~LuaEngine();void addSearchPath(const char* path);int executeScriptFile(const char* filename);int executeString(const char *codes);int executeFunction(int numArgs);lua_State *getLuaState();void addLuaLoader(lua_CFunction func);int luaLoadBuffer(lua_State *L, const char *chunk, int chunkSize, const char *chunkName);private:int _callFromLua;lua_State *_state;};
}

#include "LuaEngine.h"
#include "string"
#include "base/fileUtils/FileUtils.h"
#include "base/EngineLog.h"
#include "base/script/lua_interface.h"namespace cloud
{int gameEngine_lua_loader(lua_State *L){static const std::string BYTECODE_FILE_EXT    = ".luac";static const std::string NOT_BYTECODE_FILE_EXT = ".lua";std::string filename(luaL_checkstring(L, 1));size_t pos = filename.rfind(NOT_BYTECODE_FILE_EXT);if (pos != std::string::npos){filename = filename.substr(0, pos);}pos = filename.find_first_of(".");while (pos != std::string::npos){place(pos, 1, "/");pos = filename.find_first_of(".");}// search file in package.pathunsigned char* chunk = nullptr;size_t chunkSize = 0;std::string chunkName;FileUtils* utils = FileUtils::getInstance();lua_getglobal(L, "package");lua_getfield(L, -1, "path");std::string searchpath(lua_tostring(L, -1));lua_pop(L, 1);size_t begin = 0;size_t next = searchpath.find_first_of(";", 0);do{if (next == std::string::npos)next = searchpath.length();std::string prefix = searchpath.substr(begin, next);if (prefix[0] == '.' && prefix[1] == '/'){prefix = prefix.substr(2);}pos = prefix.find("?.lua");chunkName = prefix.substr(0, pos) + filename + BYTECODE_FILE_EXT;if (utils->isFileExist(chunkName.c_str())){utils->readFile(chunkName.c_str(),&chunk,chunkSize);				

本文发布于:2024-02-01 19:20:51,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170678645038891.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:引擎   游戏   lua
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23