Repository navigation
Releases: fotlim/desktop-pet
Release list
v1.2.7
v1.2.6 点击/拖动不再卡(帧按需解码)
桌面宠物 DesktopPet v1.2.6
1. 点击不再卡(帧改成按需解码)
以前点一下动作,要先把241 帧全部解成位图(解码 + 缩放 + 垫画布),这 1 秒左右窗口是定住的。
现在改成播放到哪一帧就解哪一帧,前后各留 10 帧在缓存里:
| 之前 | 现在 | |
|---|---|---|
| 点动作到开始 | 约 1 秒(定住) | 立即 |
| 内存(RSS) | 330 MB | 123 MB |
| 实测帧率 | 24 fps | 24.1 fps |
2. 拖动不再卡
拖动和弹跳属于高速移动,原来「位置没变就不重画」的省事逻辑会漏掉中间的位移(表现就是一跳一跳)。
现在只要在拖动/弹跳中,每帧都重画。
3. 弹跳的拖影
- 移动过程中把跟随宠物的信息面板收起来(它跟不上宠物,叠在画面上就像是拖影)
- 配合上面「每帧都重画」,不再出现前后两帧位置差一截的观感
如果你那边还能看到拖影,截一段动图发我 —— 那说明是别的原因(比如素材自带的柔光边缘),我再针对性处理。
升级
解压覆盖,托盘退出再 start.bat。
v1.2.5 去掉淡入 + 吃掉只吃一个 + 竖向整理
桌面宠物 DesktopPet v1.2.5
按你的四点要求改的:
1. 彻底去掉淡入
切动作就是直接换帧,不再有「两副姿势叠着」的那一下。
「建帧时每 8 帧跑一次消息循环」保留 —— 载入动作帧时画面不会定住。
2. 吃掉图标只吃一个
已经有一个被吃掉的还没回原位时,不会再吃第二个(日志:已经吃掉一个图标了,等它回原位再吃下一个)。
3. 图标操作不一定触发
- 拖到图标上:45% 概率(之前 100%)
- 溜达到图标上:25% 概率(之前 60%)
- 外加 45 秒冷却
4. 整理图标改成竖向排
先往下排满一列,再排右边一列(之前是横向一行一行铺)。
实测:第一列 11 个图标,x 都是 8,y 从 8 到 1028。
升级
解压覆盖,托盘退出再 start.bat。
v1.2.4 修动作开始前「缩一下」
桌面宠物 DesktopPet v1.2.4
修「动作开始前会缩一下」。
查到的原因
不是窗口缩放 —— 实测整段过渡里窗口尺寸一直是 398×250,纹丝不动。是交叉淡入的末尾:
待机剪影高 184
动作首帧剪影高 169~182 (源素材片头本来就是下蹲/前倾的预备姿)
混合帧剪影高 184~186 (两副姿势叠在一起,取并集)
淡入最后一帧 → 待机影像消失 → 剪影瞬间塌到 169
所以看到的是:先「胖」一下再「缩」回去。
改法
- 淡入从 6 帧(250ms)缩到 3 帧(125ms)
- 动作帧更快占主导:混合系数从 0.4 起步(而不是 0),两副姿势叠着的时间短到看不出
- 动作片头本身那点预备姿势还在(那是源动画自带的),但不再有突兀的「缩」
升级
解压覆盖,托盘退出再 start.bat。
v1.2.3 修动作淡入的黑框
桌面宠物 DesktopPet v1.2.3
只修一个 bug:动作淡入时那块半透明黑框。
原因
淡入要把「上一帧」和「动作第一帧」混起来,这两张图原来都是从 HBITMAP 转的(Image.FromHbitmap),
而 GDI+ 这个转换会丢掉 alpha 通道——透明区域变成黑底。两张一混,50% 黑底铺满整块画布,就是那个黑框。
修法
两边都改成按当前缩放 / 配色 / 画布重新解码原 PNG(Get-PetFrameBitmap),拿到真正的 32bppArgb 透明位图再混:
- 实测解码帧四角
A=0,中间A=255 - 混合帧四角仍然
A=0—— 不再有黑底 - 取不到起点帧时不混帧,照常播放(不会把画布画黑)
效果
点动作时:待机姿势 → 6 帧交叉淡入 → 动作,全程背景透明,没有黑框,动作连贯。
升级
解压覆盖(别动 settings.json),托盘退出再 start.bat。
v1.2.2 动作切换交叉淡入,不再生硬
桌面宠物 DesktopPet v1.2.2
这一版只改动起来的手感:点击动作 → 动画开始不再生硬。
1. 交叉淡入(250ms)
以前点一下就从待机的某帧「啪」一下跳到动作第一帧。现在切动作时,把「上一帧」和动作第一帧按 6 帧(约 250ms)比例混合过渡:
- 动作开始:
动作过渡:cat 交叉淡入 6 帧(250ms) - 动作播完:
动作过渡:idle 交叉淡入 6 帧—— 回待机也是淡入,不再突然换姿势 - 淡入起点在建帧之前先拷一份(建帧会释放旧帧缓存,直接拿句柄会 GDI+ 报错)
2. 载入时不再定住画面
建帧(241 帧 PNG 解码 + 垫画布)原来是在点击处理里同步跑完的,期间窗口完全不动。现在每 8 帧跑一次消息循环,载入过程里宠物继续播待机动画,不会「卡一秒然后突然跳」。
代价:载入那 1 秒左右渲染帧率会掉到 13~16 fps(日志里能看到),载入完成后恢复 24 fps。
3. 其它
- 上一版把帧缓存收紧到 2 个动作,释放帧时会清掉「上一帧」指针,避免淡入拿到已释放的位图
- 素材没变(24fps / 241 帧 / 318×200 画布)
升级
解压覆盖(别动 settings.json),托盘退出再 start.bat。
v1.2.1 24fps 全帧率 + 桌面图标互动
桌面宠物 DesktopPet v1.2.1
v1.2.0 的两个大改动都在这(24fps 全帧率 + 桌面图标互动),这一版只补一个内存问题。
动作改成 24fps 全帧率
- 每个动作 241 帧 / 24fps / 10.04 秒,13 个动作共 3133 帧,素材约 157 MB
- 原生 24fps 播放,不插帧;画布统一 318×200
新功能:桌面图标互动
右键宠物(或托盘)→「桌面图标互动」,或者把宠物拖到图标上自动触发:
| 事件 | 行为 |
|---|---|
| 吃掉 | 图标挪到屏幕外,180 秒后自动回原位(队列存 icon-state.json,重启不丢,退出时立刻还回) |
| 搬运 | 自动关掉「自动排列图标」,图标丢到随机网格位置 |
| 整理 | 随机从 名称/时间/大小 × 正序/倒序 里挑一种重排全部图标 |
- 45 秒冷却;「溜达到图标上也触发」默认关(菜单可勾)
- 每次动手前记布局(
icon-layout.json),菜单可「恢复布局」「立即还回被吃掉的图标」 - 自动排列只能走注册表
FFlagsbit0 + 重启一次资源管理器;第一次会弹框确认一次,之后不再问
这一版修的
- 24fps 素材一帧 250KB 上下,帧缓存从「最多 3 个动作」收紧到「当前动作 + idle」:
RSS 397 MB → 239 MB
升级
解压覆盖(别动 settings.json / icon-state.json / icon-layout.json),托盘退出再 start.bat。
zip 158.3 MB,体积几乎全是 24fps 素材。想要小体积:用
tools/build-frames.py把FPS_OUT改回 12 重抽(约 81 MB)。
v1.2.0 24fps 全帧率 + 桌面图标互动(吃掉/搬运/整理)
桌面宠物 DesktopPet v1.2.0
1. 动作改成 24fps 全帧率
- 每个动作 241 帧 / 24fps / 10.04 秒(源 webm 就是 24fps,这次一张不丢)
- 13 个动作共 3133 帧,素材约 157 MB(之前 12fps 是 81 MB)
- 原生 24fps 播放,不再靠插帧补顺;
idle/sleep/walk也不插帧 - 画布统一 318×200(所有动作共用,切动作不缩放)
2. 新功能:桌面图标互动
右键宠物(或托盘)→「桌面图标互动」,也可以让它自动触发:
| 事件 | 行为 |
|---|---|
| 吃掉一个图标 | 把图标挪到屏幕外,180 秒后自动回到原位;进程重启也不丢(队列在 icon-state.json),退出程序会立刻还回 |
| 搬运一个图标 | 自动关掉桌面「自动排列图标」,把图标丢到一个随机网格位置 |
| 整理图标 | 从 名称正序 / 名称倒序 / 时间正序 / 时间倒序 / 大小正序 / 大小倒序 里随机挑一种重排全部图标 |
- 触发:把宠物拖到图标上就会随机来一个(默认开);「溜达到图标上也触发」默认关,菜单里可勾
- 45 秒冷却,不会一直折腾桌面
- 安全网:每次动手前把布局记进
icon-layout.json,菜单里有「恢复上次记下的图标布局」「立即还回被吃掉的图标」 - 自动排列这块只能走注册表
HKCU\...\Shell\Bags\1\Desktop\FFlags的 bit0 + 重启一次资源管理器才生效:
第一次会弹框问一次(任务栏会闪一下),之后记住不再问 - 实测(67 个图标):整理后 67/67 位置变化;吃掉后坐标跑到 (2444,1328) 屏幕外,还回精确回到 (584,512);搬运 (584,614) → 随机 (1700,818)
升级
解压覆盖(别动 settings.json / icon-state.json),托盘退出再 start.bat。
体积提醒:素材 157 MB,zip 158.3 MB。只是想要原来的小体积,可以自己用
tools/build-frames.py把FPS_OUT改回 12 重抽。
v1.1.1 关掉控制台也不退出,托盘右键退出
桌面宠物 DesktopPet v1.1.1
关掉控制台不再退出程序 —— 这是这次唯一的改动。
以前
start.bat 把宠物直接跑在控制台进程里。点窗口右上角 ✕,Windows 直接杀进程,宠物和托盘一起没,
而且控制台关闭事件在进程里拦不住(控制台窗口归 conhost / Windows Terminal 所有,进程收不到可取消的通知)。
现在
start.bat走新的-Mode launch:先把本体拉成一个隐藏的后台进程(-Mode run -Background),控制台只负责显示提示- 直接运行
DesktopPet.ps1也一样:检测到「可见控制台」就自己转后台,再退出控制台 - 所以关掉控制台窗口不会退出,宠物继续待在托盘里
- 右键「宠」托盘图标 → 退出(关掉托盘和桌宠) 才是退出;不会留孤儿进程
实测:
- 后台进程
MainWindowHandle = 0(没挂在可见控制台上),关任何控制台窗口都杀不到它 - 从控制台启动后,控制台进程 1 秒内结束,后台
-Mode run进程继续跑,桌宠窗口和托盘图标都在 start.bat无参数时:启动 → 打印提示 → 等你按任意键;按 ✕ 也只是关掉这个窗口
用法
start.bat 正常启动(托盘 + 桌宠,控制台可关)
start.bat -Mode pet 只跑宠物并占着控制台(调试用,关窗口就退)
start.bat -Mode install 装开机自启
start.bat -Mode list 看有哪些模型
素材没变,还是 v1.1.0 的「整段 10 秒 + 统一画布 309×200」,zip 约 81.7 MB。
v1.1.0 动作播完整 10 秒 + 等大小不缩放
桌面宠物 DesktopPet v1.1.0
这次只解决两件事:动作播完整的一段(不再循环小片段)、切换动作时不突兀缩放。
1. 动作改成原片整段
源 webm 每个动作都是 241 帧 / 24fps / 10.04 秒。老抠图脚本每段只截了 34 帧(1.4 秒),
所以你看到的是「1.4 秒的小片段循环 7 遍」。
现在按整段重抽:
| 项目 | 以前 | 现在 |
|---|---|---|
| 每个动作帧数 | 34 帧(1.4 秒) | 121 帧(10 秒,源 24fps → 采 12fps) |
| 播放方式 | 1.4 秒循环 7 遍 | 一遍到底,播完回待机 |
| 13 个动作总帧数 | 468 | 1573 |
| 素材体积 | ~45 MB | ~81 MB |
实测日志:
宠物动作:伸懒腰 12 秒(整段 10 秒)
宠物动作结束:伸懒腰 实际 10.2 秒
同一动作第 3 秒抱着魔方、第 8 秒已经收手 —— 姿势确实在变,不是重复。
2. 等大小:不再突兀缩放
每个动作按内容裁边的尺寸本来就不一样(156~309 px),以前换动作时窗口跟着变,看着就是
「突然放大/缩小 + 角色位置乱跳」。
现在 pet.json 里声明统一画布 canvas: { w: 309, h: 200 },每个动作带 ox/oy;
载入帧时按 只挪位置、不缩放 垫进同一块画布:
- 待机窗口
(2153,803) 309x200→ 动作中(2153,803) 309x200 - 位置差 0,尺寸差 0(实测)
3. 顺带
- 12fps 素材在载入时插帧到 24fps 观感(只混一次,播放零开销);
idle/sleep/walk是慢速循环,不插帧省内存 - 老素材兼容:模型包
pet.json里写了ms的短片段仍按ms循环,"pingpong": false关往返 -Mode selftest仍然全通过(模型列表 / 菜单勾选 / 配色矩阵 / 切换落盘)- 想自己重抽(比如 24fps 全帧率):
tools/build-frames.py
升级
解压覆盖原目录(别动 settings.json),右键托盘退出再双击 start.bat(或重跑 -Mode install)。
体积说明:素材从 ~45 MB 涨到 ~81 MB,因为动作从 1.4 秒变成 10 秒。24fps 全帧率会是 ~170 MB,取舍见 README。