[原创]LuaPlus上手指南(1)

2024-01-07 11:32
文章标签 手指 原创 luaplus

本文主要是介绍[原创]LuaPlus上手指南(1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[原创]LuaPlus上手指南(1)

LuaPlus上手指南(1)

版权所有,转载请注明出处,勿用于商业用途,谢谢!

作者:    大宝天天见

Blog:    http://www.cppblog.com/singohgod

本人水平有限,有错请指出,欢迎交流,共同进步!

 

国内关于Lua的资料实在是太少,为了寻找一个合适的LuaC++封装,真是如同大海捞针.在看了众多资料后锁定以下几种:LuaBind ToLua++ LuaPlus.在选择上颇有讽刺的味道,LuaBind的版本号还没到1.0,加上网友颇有微词,放弃.ToLua++本来有朋友推荐,但是怎么都找不到下载,官网就是打不开,无赖放弃.就只有LuaPlus,看到一些人的评价还行,于是决定就用它吧.

LuaPlus的资料就更少了,连怎么配置怎么调试等什么都没有,只有沐枫大哥讲解了语法方面的一篇文章.啊哟,怎么搞呢,难道又只有硬着头皮上了?(某伟人曾说过,但凡杰出的事都是硬着头皮干出来滴)

好了,言归正传,下面讲讲我的经验吧:

如何编译

1.       下载

首先到官方网站下载: http://www.luaplus.org/

下载这个: All source code: http://luaplus.org/LuaPlus51_Build1100.zip (我当前的版本,当然越新越好)

2.       剥离

解开下载包,打开 /LuaPlus51_Build1100/Src/LuaPlus 里面是全部源文件,src下是lua的源文件.这里有个令人疑惑的地方,源文件中带了一些不需要的文件,要剔除去,基本上需要以下这些文件:

1)      Lua库文件:

lapi.c

lapi.h

lauxlib.c

lauxlib.h

lbaselib.c

lcode.c

lcode.h

ldblib.c

ldebug.c

ldebug.h

ldo.c

ldo.h

ldump.c

lfunc.c

lfunc.h

lgc.c

lgc.h

linit.c

liolib.c

llex.c

llex.h

llimits.h

lmathlib.c

lmem.c

lmem.h

loadlib.c

lobject.c

lobject.h

lopcodes.c

lopcodes.h

loslib.c

lparser.c

lparser.h

lstate.c

lstate.h

lstring.c

lstring.h

lstrlib.c

ltable.c

ltable.h

ltablib.c

ltm.c

ltm.h

lua.h

luaconf.h

lualib.h

lundump.c

lundump.h

lvm.c

lvm.h

lzio.c

lzio.h

print.c

2)      LuaPlus头文件:

auxiliar.h

LuaAutoBlock.h

LuaCall.h

LuaFunction.h

LuaHelper.h

LuaHelper_Object.h

LuaHelper_StackObject.h

LuaLink.h

LuaObject.h

LuaObject.inl

LuaPlus.h

LuaPlusCD.h

LuaPlusFunctions.h

LuaPlusInternal.h

LuaStackObject.h

LuaStackObject.inl

LuaStackTableIterator.h

LuaState.h

LuaState.inl

LuaStateOutFile.h

LuaTableIterator.h

luathread.h

pt.h

srm.h

3)      LuaPlus源文件

LuaCall.cpp

LuaObject.cpp

LuaPlus.cpp

LuaPlusAddons.c

LuaPlusFunctions.cpp

LuaPlus_Libs.cpp

LuaStackObject.cpp

LuaStackTableIterator.cpp

LuaState.cpp

LuaStateOutFile.cpp

LuaState_DumpObject.cpp

LuaTableIterator.cpp

lwstrlib.c

3.       建立项目

然后你就可以在VS中建立一个新项目,静态链接库的:

分别把需要的文件加进去,之后编译,应该能通过了.

如何使用

接着讲讲如何在你的其他项目中使用LuaPlus.

1.必要的配置

你的项目可能是这样的:

设置GameClient的依赖项是LuaPlusLib

#include "LuaPlus.h"

using namespace LuaPlus;

记得干这事

2.创建一个状态

LuaStateOwner state;

今后的操作都围绕这个state

3.执行脚本

int iret = state->DoFile("test.lua");

返回值为0表示成功,否则不成功.

4.C++中获取Lua脚本的变量

假设你的test.lua中有:

health = 200;

通过下列方法就可以在C++中得到这个数值

int mytest = state->GetGlobal("health").GetInteger();

5.C++中调用Lua脚本里的函数

假设你的test.lua中有:

function Add(x, y)

       return x+y;

end

C++中需要先声明这个函数:

LuaFunction<float> Add =  state->GetGlobal("Add");

这样你就有了Add()这个函数,然后就可以像平常一样使用它了:

float myret = Add( 3.14f , 5.25f );

6.Lua脚本中调用C++函数

在读取test.lua之前要先把C++函数注册到Lua的运行时栈里,这样在执行lua脚本的时候,才知道执行哪一个函数:

首先有函数:

int LS_PrintNumber(LuaState* state)

{

LuaStack args(state);

       if (args[1].IsNumber()) {

              printf("%f/n", args[1].GetNumber());

       }

       return 0;

}

然后注册这个函数到Lua:

state->GetGlobals().Register("PrintNumber", LS_PrintNumber);

这样就把LS_PrintNumber映射为Lua中可以使用的函数PrintNumber.

Test.lua脚本中添加调用语句:

PrintNumber(30);

state->DoFile("test.lua");执行的时候,就执行了C++中的这个函数.

总结

本文介绍了LuaPlus的基本配置方法和使用,希望对你有帮助.下一篇将介绍一些高级特性,如怎样在VS中调试LuaPlus的脚本,以及对类的操作等.

如果还有任何疑问可以看看下面这个简单的例子:
  /Files/singohgod/LuaPlus_Test.rar

这篇关于[原创]LuaPlus上手指南(1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/579768

相关文章

2024高教社杯全国大学生数学建模竞赛B题原创python代码

以下均为python代码。先给大家看看之前文章的部分思路: 接下来我们将按照题目总体分析-背景分析-各小问分析的形式来 1 总体分析 题目提供了一个电子产品生产的案例,要求参赛者建立数学模型解决企业在生产过程中的一系列决策问题。以下是对题目的总体分析: 问题一需要企业需要从供应商购买零配件,并且需要设计一个抽样检测方案,来决定是否接受供应商提供的零配件。题目要求设计一个能够尽可能减少检测次

Android 自定义View控件,实现跟随手指触摸移动的小球

Android UI组件是通过继承View类,然后绘制内容,比如ImageView,TextView等组件都是继承View类。 当Android系统提供的组件功能不能满足需求时,可以通过继承View类重写一个或多个方法,派生自定义的组件,View类常用重写方法: 1.构造器:View子类最基本的重写方法 protected voidonDraw(Canvas canvas) public

怎样写原创内容才能快速被收录呢?

网站原创文章怎么写才能收录?站长们都知道,文章对SEO的重要性,一篇高质量的原创文章要胜过N篇采集来的文章。那么,我们应该如何根据用户需求写出用户需要的文章呢?下面,曾庆平SEO就为大家讲一下如何写出既符合用户需求,又符合搜索引擎的高质量原创文章。 请牢记,发文章的最终目的是用来解决用户需求而不是一味的满足搜索引擎。请不要为了搜索引擎而刻意的在文章里面大量堆砌关键词,这样做只会让用户感觉文章没

SEO如何提高原创内容输出增量?

对于任何一个网站建设运营而言,我们在一个长周期的运营过程中,在某一个时间点,总会遇到发展瓶颈,比如: 流量停止不前。 百度权重,没有明显变化。 特定关键词排名,长期稳定,不升不降。 这个时候我们就需要思考一个问题,我们该如何推动网站继续前进,是增加品牌影响力,还是持续的拓展更多相关性的栏目,从SEO的角度来讲,我们通常会推荐从横行拓展相关性内容来入手,毕竟这样的运营成本相对是非常低的。

2024全国大学省数学建模竞赛A题-原创参考论文(部分+第一问代码)

一问题重述 1.1 问题背景  "板凳龙",又称"盘龙",是浙闽地区的传统地方民俗文化活动。这种独特的表演艺术形式融合了中国传统龙舞的精髓和地方特色,展现了人们对美好生活的向往和对传统文化的传承。 在板凳龙表演中,人们将少则几十条,多则上百条的板凳首尾相连,形成蜿蜒曲折的"龙"形。这种创新的表演方式不仅展现了民间艺术的智慧,也体现了集体协作的精神。盘龙时,龙头在前领头,龙身和龙尾相随盘旋,整

2024高教社杯全国大学生数学建模竞赛C题原创python代码

2024高教社杯全国大学生数学建模竞赛C题原创python代码 C题题目:农作物的种植策略 思路可以参考我主页之前的文章 以下均为python代码,推荐用anaconda中的notebook当作编译环境 from gurobipy import Modelimport pandas as pdimport gurobipy as gpfrom gurobipy import GR

【原创】java+springboot+mysql企业产品销售管理系统设计与实现

个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交给天意。 前言: 随着市场机制的日趋完善,商品经济迅猛发展,企业自主权不断增强。在商品经济化的背景下,企业间的竞争日益激烈,销售作为企业获取利润的关键环节,其管理效率和效果直接影响到企

pico手柄和人物模型手部旋转同步,实现手柄控制手臂手部位置移动、手部旋转和手指的操作了

这里的主要内容就是下述代码; // 获取左手控制器的旋转(四元数表示)Quaternion aRotationQuaternion = leftHandController.rotation;// 计算旋转差值(四元数表示)Quaternion rotationDifference = Quaternion.Euler(0, -90, -90);// 应用差值到左手控制器的旋转并获取新的四元数

【2024数学建模国赛赛题解析已出】原创免费分享

2024数模国赛赛题已正式发布 数模加油站初步分析评估了此次竞赛题目: A题:偏数学+仿真建模,难度偏难,适合数学专业背景的同学 B题:评价决策类,自由度大,容易水,适合基础不太好的同学 C题:数据优化题,比去年简单,目前看难度最低 D题:几何建模题,偏数学,适合数学相关专业 E题:运筹优化类题目,对优化基础要求较高 整体难度:    A>B≥C A>D>E>B≥C

【ACdream】ACdream原创群赛(18)のAK's dream

这次的群赛AK的不少,7题的也很多啊。。Orrrrrrrz。。。。 暂时只写出7题。。。 A:1196 模拟。。 /** this code is made by poursoul* Problem: 1196* Verdict: Accepted* Submission Date: 2014-09-06 19:12:44* Time: 0MS* Memo