Blitz Max |
|
[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_pushstring
和 lua_tostring
是这些类型函数的示例。大多数字符串通常以这种方式传递。
lua_pushlstring
和 lua_tolstring
是这类函数的示例。它们可用于在 Lua 和 BlitzMAX 之间传递 UTF 编码的 Unicode 字符串。
此外,该接口还提供两个函数:
function lua_pushbytearray (lua_state:byte ptr, Buffer:byte[])
function lua_tobytearray:byte[] (lua_state:byte ptr, index:int)
它们可用于将 BlitzMAX 字节数组传递到 Lua 和从 Lua 传递到 BlitzMAX - 在 Lua 端,它们显示为字符串,但这些字符串不会以任何方式被接口转换。
注意:请记住,Lua API 和 BlitzMAX API 都必须复制在 Lua 和 BlitzMAX 之间传递的字符串。Lua 复制是为了避免“悬空指针”,BlitzMAX 在 C 字符串与其内部格式之间转换时进行复制。因此,传递大量文本可能需要内存和处理器能力。
基于字节数组的接口函数仍然会复制其参数一次。
如果您希望完全避免复制,您可能需要考虑使用(轻量级或完整)用户数据对象。
几乎所有 Lua API 接口类型和函数都已在 BlitzMAX 中复制。但是,由于似乎无法定义具有可变参数列表的 BlitzMAX 函数,因此以下 API 函数在 BlitzMAX 中不可用:
lua_pushfstring
lua_pushvfstring
和
luaL_error
此外,以下函数也缺失:
luaL_checkoption
所有其他函数都已复制,因此在 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 接口。