# 介绍

LuaSTG是一个基于C/C++开发、采用Lua作为脚本语言的弹幕射击游戏引擎。其最初版本由隔壁的桌子于2011到2012年间开发,但后续源代码不慎遗失,不再有后继版本。

我们基于LuaSTG最后一个版本重新实现了所有API,并以LuaSTGPlus的名称对外发布。但是由于作者忙于工作,LuaSTGPlus项目大约在2017年左右停止维护。

在这将近五、六年时间里,我们注意到社区有不少自发的分支版本,以及衍生于其上的各种优秀作品。为了不辜负社区的支持和努力,如今,我们决定重新激活这个项目。我们期望逐步移除所有老的、不合理的设计,重新实现全套代码逻辑并适配现代化的图形API和设计模式,同时使得LuaSTG可以运行在更多设备上,方便开发者使用。

经过大约半年的开发工作,如今LuaSTGPlusv2版本归来,之后我们将持续迭代以完成我们期望的目标。

TIP

由于LuaSTGPlus老分支不再维护,本文档若无特殊注明,均代指LuaSTGPlus-v2版本。

# 新版本中带来了什么?

  • 代码
    • 100% 使用 C++17 特性重写
    • 使用 CMake 组织工程,更加可维护并方便跨平台构建
    • 可跨多种平台和体系结构
  • 脚本引擎
    • 升级到OpenResty社区维护的LuaJIT
    • 支持了沙箱模式和热更新功能,现在修改Lua脚本不再需要重启引擎
  • 文件系统
    • 引入了虚拟文件系统机制,统一各平台的行为
  • 资产系统
    • 支持了资产异步加载,并使用多线程加速资产加载过程
    • 支持了相对路径,可以方便地按照文件夹组织资产
    • 支持了资产的热更新,现在修改资产源文件可以即时在引擎中得到反馈
  • 渲染系统
    • 支持了OpenGL、OpenGL ES、Vulkan、D3D11、D3D12等多种图形API
    • 增加了高DPI支持,可以适配高DPI环境的高质量显示
    • 添加了PPU的概念,为高精度素材提供支持
    • 支持了阿拉伯语等小语种的渲染和排版
    • 引入了全新的基于Lua和HLSL的Shader文件格式,为引入自定义Shader和渲染状态提供可能
  • 音频系统
    • 重新实现的音频引擎,默认支持四路AUX通道和音频DSP插件
    • 支持了更多的音频格式,包括但不局限于:WAV、OGG、MP3、FLAC
  • 对象管理
    • 底层实现了基于ECS的对象管理机制,方便未来扩展更多可能

# 不兼容的行为

这一节内容说明了v2版本中相对于上一版本中不兼容的行为,部分行为可以通过编译选项的开关进行调整,若需改变默认行为,请参照编译章节的说明进行。

  • 不兼容API清单
    • SetImageScale:该方法作为全局渲染缩放系数在渲染图片等场景下使用,根据社群反馈该方法将增加使用成本,故从v2起废弃,当调用时不再有任何行为。如果需要保留原有行为,您需要在Lua脚本层对相关渲染方法进行特殊处理。
    • SetTexturedFontState2:已于上一版本废弃的方法,该方法将在未来被删除。
    • RegTTF:已于上一版本废弃的方法,该方法将在未来被删除。
    • UpdateSound:已于上一版本废弃的方法,该方法将在未来被删除。
    • ObjTable:该方法用于访问对象池中托管的原始Lua对象映射表,根据社群反馈该操作比较高危,且用途狭窄,故从v2起废弃,当调用时不再有任何行为。
    • UpdateObjectList:已于上一版本废弃的方法,该方法将在未来被删除。
    • Registry:已于上一版本废弃的方法,该方法将在未来被删除。
    • Execute:该方法用于执行shell命令,出于跨平台实现和安全性考虑,从v2起废弃,当调用时不再有任何行为,且总是返回false。
    • BeginScene:从v2起废弃,当调用时不再有任何行为。
    • EndScene:从v2起废弃,当调用时不再有任何行为。
    • ExtractRes:已于上一版本废弃的方法,该方法将在未来被删除。
    • ShowSplashWindow:该方法用于展示加载时的Logo窗口,考虑到我们已经引入了异步加载机制,且部分平台不能支持多窗口显示,故从v2起废弃,当调用时不再有任何行为。
  • 不兼容的行为
    • 传递给v2版本的命令行参数必须追加--标识,否则不会透传给Lua脚本。你可以通过调整编译选项更改这一行为。
    • 日志文件默认写入用户存储路径,不再打印到当前目录。你可以通过在命令行参数中增加特殊的标记来更改这一行为。
    • v2开始我们引入了新的Shader编写方式,不再兼容过去版本。

# 已支持平台

下述表格记录了已经确认可以运行的平台/系统,未在表格中出现的系统不一定不能运行,需要用户自行测试。

此外,我们没有构建到32位系统的计划,试图构建到32位系统可能会遇到各类编译问题,我们不会予以解决。

Windows Linux MacOS HTML5
x86 无计划 无计划 无计划 -
x86_64 Win10 未测试 未测试 -
arm32 无计划 无计划 无计划 -
arm64 Win11 Ubuntu 20/22 macOS 12.3 -
wasm - - - Chrome/Safari/Safari(iPad OS)
  • Windows 最低支持 Windows 7。
  • 若需要在 iPad OS 上使用,需要在 Safari 中开启实验性 WebGL2 支持。
  • 若需要在 macOS 上启用 Vulkan,需要安装 Vulkan SDK 并设置环境变量VULKAN_SDK指向 Vulkan SDK 安装路径。