SuperAPI AI 工具集

monarch-screen-setup

编程与开发

查看项目

更新于 10-15 22:37

技能介绍

用途:在 Defold 项目中用 Monarch 库组织屏幕(screen)与弹窗(popup),并设置它们之间的导航。

前提:使用前必须确认项目确实使用 Monarch。检查项目根目录 game.project 中是否含 britzl/monarch 依赖 URL,或项目树中是否存在 monarch/monarch.lua。若都没有,不应应用本技能,应告知用户项目未使用 Monarch,并建议在 game.project 添加依赖,例如: [project] dependencies#N = https://github.com/britzl/monarch/archive/refs/tags/5.2.0.zip

主要约定:屏幕与弹窗名称使用 snake_case,且必须在整个项目内唯一,因为 Monarch 在共享注册表中注册它们,重复 id 会触发断言错误。建议弹窗名加前缀(如 settings_popup、reward_popup)避免与屏幕名(如 main_menu、gameplay)冲突。目录上分为 main/、screens/<screen_name>/、popups/<popup_name>/,每个屏幕或弹窗包含 collection、gui、gui_script。

屏幕:通过 collectionproxy 加载的全屏视图,同一时间只应有一个屏幕处于活动状态。切换屏幕时始终使用 { clear = true },例如 monarch.show("gameplay", { clear = true }),避免堆叠多个屏幕。屏幕间导航不要用 monarch.back(),back() 用于关闭弹窗。

弹窗:通过 collectionfactory 创建的覆盖层,可暂停或变暗下方屏幕,支持弹窗叠弹窗。打开用 monarch.show("settings_popup"),关闭最上层弹窗用 monarch.back()。弹窗叠弹窗需设置 popup_on_popup = true。弹窗显示时 Monarch 会自动设置下方屏幕代理的 timestep_below_popup,默认值为 1;设为 0 可暂停下方屏幕。

注册与启动:在 main.collection 中为每个屏幕创建带 screen_proxy 脚本的 game object,为每个弹窗创建带 screen_factory 脚本的 game object,脚本 init() 会自动注册。不要在 main.script 的 init() 中直接调用 monarch.show(),此时其他脚本 init() 尚未运行、屏幕未注册,会触发断言错误;应通过 msg.post("#", "start") 发消息,在 on_message 中再显示首个屏幕。

常用接口:monarch.show、monarch.back、monarch.screen_exists、monarch.is_busy、monarch.data、monarch.is_popup、monarch.top,可传数据给屏幕或弹窗。

限制:资料未提供收费、平台、效果等信息。