zoukankan      html  css  js  c++  java
  • C++与Lua交互(一)

    引言

    之前做手游项目时,客户端用lua做脚本,基本所有游戏逻辑都用它完成,玩起来有点不爽,感觉“太重”了。而我又比较偏服务端这边(仅有C++),所以热情不高。最近,加入了一个端游项目,客户端和服务器都用了lua,各种玩法是让我眼界大开。在此,写下自己的心得与体会,希望能与大家共同探讨进步。

    环境搭建

    lua官网下载lua源代码,我们将用它来编译静态库,解释器,以及动态库。

    image

    CMake官网下载最新的安装包,我们将用它来作为搭建solution的工具。

    image

    集成开发环境为VS2012,整个的编码以及测试工作,将借助它来完成。

    创建solution

    将下载好的lua源码解压好后,得到如图所示目录,我们在src目录下,创建一个名为CMakeLists.txt的文本文件。

    image

    image

    根据doc目录下的readme的说明,我们编写如下内容,来建立静态库:

    image

    可以看到,建立library需要框出的所有.c文件,建立interpreter需要library文件加上lua.c,至于最后的compiler,我略去不表。

    image

    整个的CMakeLists.txt文件内容如下:

    project(LuaTest)
     
    include_directories(AFTER ${CMAKE_SOURCE_DIR})
     
    ##########lua静态库############################################
    set(LIB_FILES lapi.c lcode.c lctype.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c lauxlib.c lbaselib.c lbitlib.c lcorolib.c ldblib.c liolib.c lmathlib.c loslib.c lstrlib.c ltablib.c loadlib.c linit.c)
     
    source_group("\libFiles" FILES ${LIB_FILES})
     
    add_library (LuaLib STATIC ${LIB_FILES})
     
     
    ###########c++与lua交互###################
    add_executable(LuaWithCPPTest source.cpp)
     
    target_link_libraries(LuaWithCPPTest LuaLib)
     
     
    ############lua解释器###########
    add_executable(LuaInterpreter lua.c ${LIB_FILES})
     
     
    #ADD_DEFINITIONS(-LUA_LIB -LUA_BUILD_AS_DLL)
    ######################################define LUA_LIB##################################################
    ######################################define LUA_BUILD_AS_DLL#########################################

    写好CMakeLists.txt后,我们打开安装好的CMake工具,我们需要选中source code目录和build the binaries目录,整个结构看起来如下:

    image

    点击configure,再点击finish即可,我们无需改动编译器选项。

    image

    配置好后,点击旁边的Generate。一切ok后,我们便构造好了我们的solution。

    image

    打开LuaTest.sln后,我们有5个项目,其生成的ALL_BUILD和ZERO_CHECK这两个项目我们不必关心。LuaInterpreter是lua解释器的项目,LuaLib是lua静态库项目,LuaWithCPPTest是C++与lua交互的项目。

    将LuaInterpreter设为启动项运行,得如下结果:

    image

    将LuaWithCPPTest设为启动项运行(注意,在这之前必须运行LuaLib生成静态库,这个项目依赖LuaLib的静态库,其依赖关系由CMakeLists.txt里写明生成,具体可观察LuaWithCPPTest的项目属性),我们得到如下输出:

    image

    至此,整个环境搭建成功。 Enjoy it!

    总结

    CMake是个非常好用的生成解决方案的工具,通过它,我们可以以最少的改动来生成我们想要的解决方案。工欲善其事,必先利器。有了CMake这个利器,配合github,我们可以仅用几个文本文件在任何联网的机器上组织好我们的代码!

    忘了注明自己写的source.cpp文件了,请下载解压到lua的src文件夹下。

  • 相关阅读:
    vue系列【element ui table中render函数加if的使用】
    vue系列【watch的使用方法及immdiate、deep解决组件传值中数据改变视图不更新等常见问题】
    vue系列【element ui 处理图片流及实现多张图片轮播】
    webpack系列【webpack的基本使用及配置项】
    vue系列【element ui 行内三元表达式的使用及实现行内switch按钮加文字】
    vue系列【vue路由$route.go(1)返回使用KeepAlive保持原页面数据不更新】
    vue系列【post 和 get 请求书写及使用】
    vue系列【vue+element 三元表达式多条件实现功能】
    vue系列【sessionStorage的setItem和getItem使用】
    vue系列【vue swiper插件实现图片轮播效果】
  • 原文地址:https://www.cnblogs.com/cdh49/p/3567904.html
Copyright © 2011-2022 走看看