标签: lua

Lua vs. XML用于数据存储

我们中的许多人都被灌输使用XML来存储数据.它的好处和缺点是众所周知的,我当然不想在这里讨论它们.但是在我用C++编写的项目中,我也使用了Lua.我很惊讶Lua可以用来存储和处理数据.然而,至少在游戏编程世界中,Lua的这一方面不太被认可.

我知道XML在诸如通过互联网发送数据的情况下以及在安全起作用的地方(例如使用从网络下载的数据,或加载用户可编辑的配置文件)以及最后的情况下具有优势.不同语言的程序正在读取相同的数据.

然而,一旦我学会了使用Lua处理数据是多么好和容易(特别是让luabind支持你!),我开始怀疑是否有任何理由使用XML来存储游戏数据,如果我们已经使用了Lua呢?

暴雪在使用Lua编写UI脚本时,仍然以XML格式存储布局.是什么原因只有UI相关?

使用Lua作为数据存储语言有什么缺点?

c++ xml lua

18
推荐指数
5
解决办法
1万
查看次数

如何计算两个矩形之间的距离?(背景:Lua的游戏.)

给定两个具有x,y,宽度,高度(以像素为单位)的矩形以及以度为单位的旋转值 - 如何计算其轮廓彼此的最近距离?

背景:在用Lua编写的游戏中,我随机生成地图,但是想要确保某些矩形彼此不太靠近 - 这是必要的,因为如果矩形进入某个近距离位置,地图变得无法解决,如球需要在他们之间传球.速度不是一个大问题,因为我没有很多矩形,而且每个级别只生成一次地图.我在StackOverflow上找到的以前的链接是这个和这个

提前谢谢了!

lua distance rectangles

18
推荐指数
4
解决办法
2万
查看次数

像Apache Zookeeper没有java的东西?

是否有一些库或项目像Zookeeper一样工作,但没有java依赖?我正在考虑将它放在嵌入式Linux系统上,并且需要最小的占用空间......比如兆字节或更少.我有Lua,C和C++运行时,如果必须的话,可以把NewLISP放在那里.大多数或所有客户端都是C或C++,为了shell脚本的利益,一个很好的命令行实用程序也很有用. http://zookeeper.apache.org/

c c++ lua apache-zookeeper

18
推荐指数
2
解决办法
8504
查看次数

Lua:舍入数字然后截断

哪个是最有效的方法来舍入一个数字然后截断它(在四舍五入后删除小数位)?

例如,如果小数大于0.5(即0.6,0.7等),我想向上舍入然后截断(情况1).否则,我想截断(案例2)

for example:
232.98266601563 => after rounding and truncate = 233 (case 1)
232.49445450000 => after rounding and truncate = 232 (case 2)
232.50000000000 => after rounding and truncate = 232 (case 2)
Run Code Online (Sandbox Code Playgroud)

lua truncate rounding

18
推荐指数
6
解决办法
5万
查看次数

Lua是否优化了".."运算符?

我必须执行以下代码:

local filename = dir .. "/" .. base
Run Code Online (Sandbox Code Playgroud)

循环中数千次(这是一个打印目录树的递归).

现在,我想知道Lua是否一次性连接3个字符串(dir,"/",base)(即通过分配足够长的字符串来保存它们的总长度),或者它是否通过在内部执行它来实现这种效率低下的方式两个步骤:

local filename = (dir .. "/")              -- step1
                               .. base     -- step2
Run Code Online (Sandbox Code Playgroud)

最后一种方式是内存方式效率低下,因为分配了两个字符串而不是一个字符串.

我不太关心CPU周期:我主要关心内存消耗.

最后,让我概括一下这个问题:

Lua在执行以下代码时是否只分配一个字符串或4?

local result = str1 .. str2 .. str3 .. str4 .. str5
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我知道我能做到:

local filename = string.format("%s/%s", dir, base)
Run Code Online (Sandbox Code Playgroud)

但我还没有对它进行基准测试(内存和CPU方面).

(顺便说一句,我知道table:concat().这会增加创建表的开销,所以我猜它在所有用例中都不会有用.)

奖金问题:

如果Lua没有优化".."运算符,那么定义用于连接字符串的C函数是否是一个好主意,例如utils.concat(dir, "/", base, ".", extension)?

c string performance lua

18
推荐指数
2
解决办法
5020
查看次数

为什么Lua的长度(#)运算符返回意外值?

Lua有#运算符来计算用作数组的表的"长度".我检查了这个操作员,我感到很惊讶.

这是代码,我让它在Lua 5.2.3下运行:

t = {};
t[0] = 1;
t[1] = 2;
print(#t); -- 1 aha lua counts from one
t[2] = 3;
print(#t); -- 2 tree values, but only two are count
t[4] = 3;
print(#t); -- 4  but 3 is mssing?
t[400] = 400;
t[401] = 401;
print(#t); -- still 4, now I am confused?


t2 = {10, 20, nil, 40}
print(#t2); -- 4 but documentations says this is not a sequence?
Run Code Online (Sandbox Code Playgroud)

有人可以解释规则吗?

lua

18
推荐指数
1
解决办法
6662
查看次数

获取包含lua文件的路径

我想知道是否有办法获取当前正在执行的lua脚本文件的路径?

这特别不是当前的工作目录,可能完全不同.我知道luafilesystem会让我获取当前的工作目录,但它似乎无法告诉当前正在执行的脚本文件.

谢谢

编辑:我没有从标准命令行解释器运行,我正在通过luabind从C++二进制文件执行脚本.

filesystems lua

17
推荐指数
4
解决办法
3万
查看次数

如何检查nginx是否使用LuaJit而不是Lua?

我安装http-lua-module了nginx,制作了一个完美无缺的脚本,但现在我想确定nginx 使用LuaJit而不是Lua(因为我的研究显示LuaJit更快).

我添加到.bushrc那些代码行:

export LD_LIBRARY_PATH=/usr/local/luajit/lib:$LD_LIBRARY_PATH
export LUAJIT_LIB=/usr/local/luajit/lib
export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0
Run Code Online (Sandbox Code Playgroud)

我也重新编译了nginx,现在我只想确保它使用LuaJit.

lua nginx luajit

17
推荐指数
1
解决办法
7274
查看次数

为什么我们需要像Lua这样的可嵌入编程语言?

使用可嵌入编程语言的典型用例是什么?我是否正确理解这种语言是否应嵌入到某些程序环境中并且应该能够从那里执行?

embed lua programming-languages embedded-language

17
推荐指数
2
解决办法
7058
查看次数

为什么在Lua中使用do-end块?

我一直在努力为此寻找答案但却没有这样做.我想知道,实际使用的do-end块是什么?它只是说在我的书中需要时使用值,所以我怎么能用它呢?

我是否通过在do-end循环中放置一个函数并将局部变量放在函数外但在此do-end块内部并且函数可以看到变量来使用它来减少局部变量的范围?但那么功能仍然可以调用吗?

很抱歉非常模糊.我希望这是有道理的.也许一个插图的例子可能有用^^

lua block scoping

17
推荐指数
3
解决办法
1万
查看次数