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 的更新版本,同時也包含許多 bug 修正、額外文件和略微不同的字串處理程序(見下文)。目前(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 字串非常有用。
此外,介面提供兩個函數
函數 lua_pushbytearray (lua 狀態:位元組指標,緩衝區:位元組陣列)
函數 lua_tobytearray:位元組陣列 (lua 狀態:位元組指標,索引值:整數)
可使用此程式在 BlitzMAX 位元組陣列與 Lua 之間傳遞資料,且在 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 介面。