把 100% 的顯示尺寸對齊 Codex 桌面寵物(126 × 137)
摘要: 原本 100% 直接用 spritesheet 的單格尺寸 192 × 208 顯示,比並排的 Codex 桌面寵物大了一半,就算縮到 75% 還是明顯偏大。 根本原因: 把「spritesheet 來源格子大小」直接當成「畫面顯示大小」在用。Codex 是另外算的:mascot 以寬度為基準,高度用 ceil(寬 × 208/192) 求得,跟單格 192 × 208 無關。 影響: 兩隻並排時大小不一致;使用者得手動調到某個非整數的縮放才勉強接近,而每一級縮放又都以 192 × 208 為基礎,永遠對不準。 修法: - 新增 PET_W / PET_H(126 × 137),與 CELL_W / CELL_H 分家:後者只負責從 spritesheet 取格子,前者才是畫到畫面上的大小。 - 高度沿用 Codex 的 ake() 公式 ceil(寬 × 208/192),長寬比與 Codex 一致。 - 尺寸取自實測:Codex 與本程式並排截圖比對,因 xiao-nian 每一格的人物輪廓都固定是 208 中的 198 px,兩者輪廓高度比即等於顯示尺寸比(與螢幕 DPI 無關),推得 Codex 為 137.3 × 126.7。 - 視窗寬度加上 MIN_WIN_W = 240 下限:寵物縮小後視窗跟著變窄會讓氣泡被截斷,Codex 的氣泡(315 px)同樣遠寬於寵物本身。 - 追視死區 56 → 38,維持與寵物尺寸相同的比例。 - 視窗高度與游標追視的頭部位置一併改用 PET_H。 驗證: scale 1 時人物實高 130.4 px,實測 Codex 為 130.7 px,誤差 0.2%。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,8 +2,11 @@
|
||||
// Claude Pet renderer:Codex V2 pet contract 的動畫引擎 + 狀態機
|
||||
// 規格來源:8 欄 x 11 列、192x208 cell,列 0-8 標準動作、列 9-10 為 16 個順時針看向方向(000 = 正上方)
|
||||
|
||||
const CELL_W = 192;
|
||||
const CELL_W = 192; // spritesheet 單格來源尺寸
|
||||
const CELL_H = 208;
|
||||
// 100% 時的顯示尺寸,對齊 Codex 桌面寵物(與 main.js 的 PET_W / PET_H 一致)
|
||||
const PET_W = 126;
|
||||
const PET_H = Math.ceil((PET_W * CELL_H) / CELL_W); // 137
|
||||
|
||||
const ROW = {
|
||||
idle: 0,
|
||||
@@ -30,7 +33,7 @@ const TIMINGS = {
|
||||
review: [150, 150, 150, 150, 150, 280],
|
||||
};
|
||||
|
||||
const LOOK_DEADZONE = 56; // 游標離寵物中心太近 → 回到 idle
|
||||
const LOOK_DEADZONE = 38; // 游標離寵物中心太近 → 回到 idle(約寵物高度的 0.27)
|
||||
const LOOK_IDLE_AFTER = 6000; // 游標靜止多久後不再盯著看
|
||||
const REVIEW_DURATION = 6000; // Stop 後 review 多久回 idle
|
||||
const SESSION_STALE = 30 * 60 * 1000;
|
||||
@@ -80,8 +83,8 @@ function loadPet(pet) {
|
||||
|
||||
function applyScale(s) {
|
||||
scale = s;
|
||||
canvas.width = Math.round(CELL_W * s);
|
||||
canvas.height = Math.round(CELL_H * s);
|
||||
canvas.width = Math.round(PET_W * s);
|
||||
canvas.height = Math.round(PET_H * s);
|
||||
canvas.style.width = `${canvas.width}px`;
|
||||
canvas.style.height = `${canvas.height}px`;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user