Skip to content

透明桌宠:画面、命中与恢复 ​

目标是角色能点击、拖动和输入,透明背景真正穿透,用户仍能从宿主编辑模式找回作品。参考 examples/transparent-pet 的 manifest、main.js、style.css;先阅读窗口规则。

定义表面 ​

json
{
  "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 分开验收,合成消息不能代替。详细源码行为见透明输入模块。

当前宿主协议 · SDK 0.1.1 · MIT