Blitz Max

lua-users home
wiki

本页面简要介绍了作者版本的“axe.lua”,它是用于 [BlitzMAX][MaxGUI] 的 Lua API 接口。

简介

[BlitzMAX] 是一款快速跨平台 BASIC 编译器和运行时系统,适用于 Windows 98/ME/2000/XP、MacOS X 和 Linux。主要用于游戏开发,它支持 2D 图形、3D 图形(使用模块)、音频和网络 - [MaxGUI] 是 BlitzMAX 中用于图形用户界面的附加组件。

BlitzMAX 已经包含了 Lua (5.1.1) API 的接口(axe.lua,由 Thomas Mayer、Noel Cower 和 Simon Armstrong 编写)。作者的版本是针对 Lua 5.1.2 的更新,其中还包含了一些错误修复、额外的文档和略微不同的字符串处理(见下文)。目前(2007 年 5 月 5 日),该模块尚未上传到官方的 BlitzMAX 模块服务器 - 因此,您需要手动下载并安装它。一旦模块服务器提供新版本,只需在 BlitzMAX IDE 中进行简单的“模块同步”即可更新旧的 axe.lua。

字符串处理

一些 Lua API 函数使用或返回 C 风格的字符串,其中包含 8 位字符,并以空字节 (\0) 结尾。对于 Lua 本身,字符串只不过是一系列字节(包括空字节),并带有单独存储的长度。因此,Lua 字符串也可以用作任意数据的缓冲区(图像、声音样本等)。

BlitzMAX 提供了强大的类型检查,并支持 8 位和 16 位字符字符串。

为了将这两个世界结合起来,实际接口使用以下规则

lua_pushstringlua_tostring 是这些类型函数的示例。大多数字符串通常以这种方式传递。

lua_pushlstringlua_tolstring 是这类函数的示例。它们可用于在 Lua 和 BlitzMAX 之间传递 UTF 编码的 Unicode 字符串。

此外,该接口还提供两个函数:

它们可用于将 BlitzMAX 字节数组传递到 Lua 和从 Lua 传递到 BlitzMAX - 在 Lua 端,它们显示为字符串,但这些字符串不会以任何方式被接口转换。

注意:请记住,Lua API 和 BlitzMAX API 都必须复制在 Lua 和 BlitzMAX 之间传递的字符串。Lua 复制是为了避免“悬空指针”,BlitzMAX 在 C 字符串与其内部格式之间转换时进行复制。因此,传递大量文本可能需要内存和处理器能力。

基于字节数组的接口函数仍然会复制其参数一次。

如果您希望完全避免复制,您可能需要考虑使用(轻量级或完整)用户数据对象。

限制

几乎所有 Lua API 接口类型和函数都已在 BlitzMAX 中复制。但是,由于似乎无法定义具有可变参数列表的 BlitzMAX 函数,因此以下 API 函数在 BlitzMAX 中不可用:

此外,以下函数也缺失:

所有其他函数都已复制,因此在 BlitzMAX 中可用。

下载和安装

在您的 BlitzMAX IDE 中:

您现在可以在 BlitzMAX 代码中“import axe.lua”。此外,模块文档现在还允许直接跳转到 Lua 参考手册中描述特定 API 函数的部分。

相关工作

此版本的 axe.lua 是 BlitzLua 所需的,它是作者为 BlitzMAX/MaxGUI 模块提供的 Lua 接口。 BlitzLua 允许您运行(嵌入式或独立)Lua 脚本,并完全访问 BlitzMAX 的 2D 和 3D 图形、声音和网络功能。

致谢

这项工作基于 Thomas Mayer、Noel Cower 和 Simon Armstrong 编写的 Lua API 接口。

参考资料

--AndreasRozek


最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2011 年 11 月 8 日上午 8:19 GMT (差异)