v1.2.02026/9/12
可拖动可缩放的窗口(幽灵框预览 + 松手重建、贴边吸附、双击复位、小键盘搬窗)、输入框、滑杆与进度条、可拖动滚动条、复选框。
基于 Tao Mod Engine 2.0(api.ui.show + api.input)的自建对话框库:
不依赖引擎自带的 DialogShow(那个只有标题/正文/按钮,连 rect 都没有),
自己把「可拖动可缩放的窗口 + 真实输入框 + 一整套控件 + 自造图标」做齐,纯 Lua(native = false)。
需要宿主带
tao.ui_controls扩展(api.ui.show可用);不可用时日志会明确提示。
| 能力 | 引擎现状 | 我们做了什么 |
|---|---|---|
| 窗口移动 / 缩放 | TaoWindow、UiWindow、服务 ui/uicontrols、ABI 四处契约都没有 Move/Resize | 自造拖动层:按住标题拖、拖右下角改尺寸;幽灵框预览、松手重建,内容(文字/勾选/焦点)全部保留 |
| 窗口管理 | 没有这个概念 | 双击标题复位、边缘钳制、贴边/居中吸附、落点记忆(本次运行内) |
| 键盘操作窗口 | 只有输入快照,没有窗口级语义 | 小键盘 8/2/4/6 搬窗、Esc 关顶层 |
| 滑杆 / 进度条 | 节点类型里没有 range/slider | 自造滑杆(可设档位、滑块与填充条实时跟手)、只读进度条 |
| 滚动列表 | scroll 的滚动条不可拖动 | 自造可拖动滚动条(跟手)+ 只渲染可见行,绕开"每文档 128 节点"上限 |
| 复选框 | 没有 checkbox 控件 | 自造复选框(勾/未勾两张图切显隐,点一下立刻变) |
| 图标 / 缺字形 | UI 字体缺 [ ] { } < > ✔ × → 显示 <Missing | 25→16 张自造 PNG(×、✔、勾选框、箭头、滑条零件),resources.xml 注册后用 image 节点显示 |
| 可复用 API | 只有裸节点树 | D.show{...} + 快照回调 + 状态保留重建 + 建失败回滚 + 布局容错 |
目录放进 mods/,进游戏。
入口只有主菜单 (210,10) 的「打开对话框」按钮。
对话框内:
| 操作 | 效果 |
|---|---|
| 拖标题区 / 拖右下角 | 移动 / 改尺寸(靠边自动吸附) |
| 双击标题区 | 回到初始位置 |
| 拖滑杆、拖列表右侧滚动条 | 数值与列表实时跟手 |
| 点复选框 | 立刻切换 |
| 小键盘 8/2/4/6 | 搬窗(输入框有焦点时先让给打字,按 Tab 即可) |
| Esc | 关闭顶层对话框 |
-- 顺序有讲究:drag → skin → controls → dialog
local drag = assert(api.include("drag.lua") or MOD_DRAG)
drag.install() -- 不传 key 就不占任何键
assert(api.include("skin.lua")) -- 自造美术(需要 resources.xml + images/ 一起搬)
local controls = assert(api.include("controls.lua") or MOD_CONTROLS)
controls.install()
local D = assert(api.include("dialog.lua") or MOD_DIALOG)
local h = D.show{
title = "设置",
title_icon = "icon_check", -- 自造图标
fields = { { key = "name", label = "名称:", text = "" } },
controls = {
{ kind = "slider", key = "vol", label = "音量", min = 0, max = 100, step = 5, value = 60,
instant = true, instant_steps = 21 }, -- instant = 跟手
{ kind = "progress", key = "load", label = "进度", min = 0, max = 100, value = 35 },
{ kind = "checkbox", key = "sun", label = "无限阳光", checked = true },
},
items = { { label = "条目一", selected = true }, { label = "条目二" } },
on_ok = function(snap)
api.log(snap.texts["name"] .. "/" .. tostring(snap.values["vol"]))
end,
}
-- D.snapshot/get_text/set_text/get_control/set_control/resize/move_by/set_first/active/close_top/close_all
D.show 的常用选项:title、title_icon、fields、controls、items、x/y/w/h、
modal(默认 true)、draggable / resizable / snap(默认 true)、
max_rows(默认 10)、scrollbar(默认 true;关掉则退回「上一页/下一页」分页)、on_ok / on_close。
main.lua 入口(装配 + 主菜单按钮 + 停用清理)
drag.lua 自造窗口拖动/缩放层
keys.lua 自造键盘窗口操控层
controls.lua 自造控件族(滑杆/进度条/滚动条/复选框)
skin.lua 自造美术层(图标 + 控件贴图 id 表)
dialog.lua 可复用对话框库(排版/滚动/吸附/重建/容错)
demo.lua 示例窗口(460 宽小窗)
resources.xml 自造 PNG 清单
可拖动可缩放的窗口(幽灵框预览 + 松手重建、贴边吸附、双击复位、小键盘搬窗)、输入框、滑杆与进度条、可拖动滚动条、复选框。
创作者未填写更新日志。
创作者未填写更新日志。
作品星级 = 所有有效评分的平均值,显示到小数点后一位。每个账号只计一票,可修改或撤回;作者不能给自己的作品评分。评分不随版本更新清空,停用账号的评分不计入。
登录后评分
玩家评论 0
登录 后即可参与评论,不需要开发者资格。
还没有评论,来聊聊这个 Mod 吧。