问题标签 [lua]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
compiler-construction - 静态类型的 Lua
我正在寻找在编译时进行类型检查的 Lua 前端编译器,但输出标准 Lua 5.1 字节码(只有运行时类型)。我想要的是相当数量的静态编译时语法分析和可选类型,以便比运行时更快地检测到微不足道的错误。生成的字节码必须与使用标准 LoadString() 编译的现有 Lua 字节码很好地配合使用。
需要明确的是——任何差异只会发生在字节编译时。在运行时,字节码不会知道在编译阶段发生了任何不同/不寻常的事情。
我的想法听起来很像 ActionScript;我什至不介意输出 Lua 字节码的 ActionScript 编译器!
有没有人听说过这样的努力?我已经看到一些关于使用 MetaLua 来执行此操作的参考资料,但老实说,我还不够聪明,无法对他们的文档做出正面评价
lua - 在 Lua 中使用 IUP 获取输入
我一直在尝试通过 IUP 获得输入来制作一个小型乒乓球游戏。我想尝试一些输入,并尝试了 IUPGL 示例附带的一些代码,但输入似乎根本不起作用。这是到目前为止的代码:
我的理解是canvas:k_any()
当一个键被按下时会被调用,但它没有响应,即使是退出命令。有任何想法吗?
lua - 如何迭代Lua字符串中的单个字符?
我在 Lua 中有一个字符串,想在其中迭代单个字符。但是我尝试过的代码都没有,官方手册只显示了如何查找和替换子字符串:(
asynchronous - Lua 中的异步输入
在一个相关问题中,我询问了如何通过 IUP 获取输入。这工作得很好,除了它通过系统,并且受制于对游戏来说不是最佳的重复率。我真正想要的是在给定时间获得任何键的当前状态的能力。有没有办法做到这一点(通过 IUP 或其他方式)?
c++ - 控制 Lua5.1 的垃圾收集器
好的,所以我有一个使用 SWIG 向 Lua 公开的 C++ 类。该脚本创建对象,但管理器类也有一个指向该对象的指针,因此无论出于何种原因都可以在 C++(或其他脚本)中对其进行修改。
问题是当脚本完成对象被释放时,如何控制垃圾收集器收集的内容而无需实现 gc 元方法?
这是一个例子:
现在对象已经向管理器注册了自己,因此应用程序的其余部分(和其他脚本)可以访问它。
显然不是一个非常现实的例子,但希望它能说明我的问题。有没有办法在没有 C++ 中的 gc 元方法的情况下否决垃圾收集器?
只是为了澄清管理器是用 C++ 编写的,而 Utils 是包含公开类的模块名称。该对象还在其构造函数中将自己注册到管理器。
提前致谢。
c++ - 如何将对象列表从 C++ 传递到 Lua?
我是Bitfighter的首席开发人员,并且正在使用 Lua 添加用户脚本机器人。我正在使用 C++ 和 Lua 使用 Lunar 将它们粘合在一起。
我正在尝试做一些我认为应该非常简单的事情:我在 Lua 中有一个 C++ 对象(下面的代码中的机器人),我在它上面调用了一个方法(findItems),它导致 C++ 搜索周围的区域机器人并返回它找到的对象列表(TestItems 和此处未显示的其他对象)。我的问题只是我如何在 C++ 中组装并返回找到的项目列表,然后在 Lua 中迭代它们?
基本上,我想填写<<<< 创建项目列表,将其返回到下面的 lua >>>> 块,并在 Lua 代码本身中进行我可能需要的任何更正,包括在下面。
我试图保持代码简单但完整。希望这里没有太多!谢谢!
C++ 头文件
C++ .cpp 文件
Lua 代码
variables - 在 Lua 中补间一个值
我是怎么处理这个的?我想在 x 时间内将一个值从一个值补间到另一个值。同时还考虑到在开始和结束时有一个“轻松”会很好。
我知道,我真的不应该问,但我自己试过了,我被困住了。请假设要导致延迟,您需要调用函数 wait(time)。
c++ - 如何干净地结束 Lua 线程?
我的情况是我正在使用 Lua (C) API 来执行保存在字符串中的脚本。我希望用户能够终止脚本的执行(如果脚本包含无限循环,这是必不可少的),我该怎么做?
lua - 静态分析 Lua 代码的潜在错误
我正在使用一个封闭源代码的应用程序,它加载 Lua 脚本并允许通过修改这些脚本进行一些自定义。不幸的是,如果 Lua 脚本之一出现问题,该应用程序不太擅长生成有用的日志输出(我得到的只是“脚本失败”)。
我意识到动态语言几乎可以抵抗静态代码分析,例如可以分析 C++ 代码的方式。
不过,我希望会有一个工具通过 Lua 脚本运行,例如警告未在特定脚本的上下文中定义的变量。
基本上我正在寻找的是一个用于脚本的工具:
会输出:
对于大多数事情,它只能是真正的警告,但这仍然很有用!这样的工具存在吗?或者可能是具有类似功能的 Lua IDE?
谢谢,克里斯
c++ - Lua、C++ 和穷人的子类化
我是Bitfighter的首席开发人员,我们正在使用 Lua 和 C++ 的混合体,使用 Lunar(Luna 的一种变体,可在此处获得)将它们绑定在一起。
我知道这个环境对面向对象和继承没有很好的支持,但我想找到一些方法来至少部分解决这些限制。
这是我所拥有的:
C++ 类结构
Robot 实现了一个名为getFiringSolution(GameItem item)的方法,该方法查看item的位置和速度,并返回机器人需要开火才能击中item的角度。
所以我的问题是我想将rock 、 stone或rockyStones传递给getFiringSolution方法,但我不知道该怎么做。
这仅适用于岩石:
理想情况下,我想做的是这样的:
这个潜在的解决方案不起作用,因为 Lunar 的检查函数希望堆栈上的对象具有与为 GameItem 定义的类名匹配的类名。(对于您在 Lunar 注册的每种对象类型,您都需要以字符串的形式提供一个名称,Lunar 使用该名称来确保对象的类型正确。)
我会接受这样的事情,我必须检查每个可能的子类:
这个解决方案的问题是,如果堆栈上的项目类型不正确,检查函数会生成错误,并且我相信会从堆栈中删除感兴趣的对象,所以我只有一次尝试抓取它。
我想我需要从堆栈中获取指向 Rock/Stone/RockyStone 对象的指针,弄清楚它是什么类型,然后在使用它之前将其转换为正确的东西。
Lunar 进行类型检查的关键位是:
如果我这样称呼它:
然后 luaL_checkudata() 检查堆栈上的项目是否是 Rock。如果是这样,一切都很好,它返回一个指向我的 Rock 对象的指针,该指针被传递回 getFiringSolution() 方法。如果堆栈上有一个非 Rock 项目,则强制转换返回 null,并调用 luaL_typerror(),这会将应用程序发送到 lala 土地(错误处理会打印诊断信息并以极端偏见终止机器人)。
关于如何推进这一点的任何想法?
非常感谢!!
我想出的最佳解决方案......丑陋,但有效
根据以下建议,我想出了这个:
然后,后来...
我可能可以对此进行进一步的优化...我真的很想弄清楚如何将其折叠成一个循环,因为实际上,我将处理三个以上的类,而这个过程是有点麻烦。
对上述解决方案略有改进
C++:
然后,后来...
Lua 辅助函数,作为一个单独的文件包含,以避免用户需要手动将其添加到他们的代码中:
用户从 Lua 以这种方式调用: