透明桌宠:画面、命中与恢复
目标是角色能点击、拖动和输入,透明背景真正穿透,用户仍能从宿主编辑模式找回作品。参考 examples/transparent-pet 的 manifest、main.js、style.css;先阅读窗口规则。
定义表面
{
"window": {
"size": {"width": 280, "height": 220, "minWidth": 280, "minHeight": 220},
"layer": "top",
"surface": {"transparent": true, "inputMode": "regions"}
}
}这段放入完整 manifest 的 window。CSS 使用透明根背景;角色/面板的实际交互矩形或多边形通过 window.setInputRegions({regions}) 整组提交。矩形为内容区域内的 DIP,相对本实例,不能用屏幕物理像素或其他窗口坐标。
命中区域跟随状态
导航初始区域为空;ready 后首帧测量、面板展开收起及自身尺寸改变时重新计算。只提交可交互的实际区域;空数组表示完全穿透。几何变化合并提交,最多一条在途和一份最新待发,不每帧堆积请求。可信编辑期间作者区域变更会被拒绝,编辑遮罩由宿主接管。
按下角色时调用 window.beginDrag,保留按钮、输入框的正常交互,不把输入框也当作拖动区。pointercancel 时释放捕获并结束拖动;宿主规范化取消不可信,不能触发需要真实手势的操作。
自主散步与持久数据
window.moveTo 默认可用,只移动自身工作区内位置,无需额外授权开关。隐藏、编辑、拖动、暂停、锁屏或挂起时调用会被拒绝;保留静态呈现,并在恢复后重新判断当前状态。待应用位置最多一份、每 16ms 合并,不写布局或存档;不能移动别的窗口或切换屏幕。
名字、投喂和成长使用安装共享 saves;配色、交互模式用每屏 configuration。隐藏、锁屏、挂起、编辑、输入名字、拖动或减少动画时停止散步;省电降帧。不要把每帧位置当游戏进度保存。
验证
检查角色内部可点击、透明空白可穿透、展开输入区不漏接、关闭面板后区域恢复、拖动取消不残留捕获。用宿主编辑模式恢复纯展示作品。物理鼠标、触摸/笔、多屏 DPI 分开验收,合成消息不能代替。详细源码行为见透明输入模块。