From fbc1ce0e5940ec9a6392d829c178560e236c6b14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Wed, 19 Aug 2026 11:18:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20UI=20=E9=A2=84=E8=A7=88?= =?UTF-8?q?=E6=8B=96=E6=8B=BD=E9=87=8D=E7=BD=AE=E8=A7=86=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 仅在画布尺寸或像素单位变化时重新计算预览尺寸 避免节点拖拽的状态深拷贝触发全画布适配 --- .../components/preview/PreviewWorkspace.tsx | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/apps/ai-game-creator-shell/src/view/ui-editor/components/preview/PreviewWorkspace.tsx b/apps/ai-game-creator-shell/src/view/ui-editor/components/preview/PreviewWorkspace.tsx index e2ff102dd..6cfee1416 100644 --- a/apps/ai-game-creator-shell/src/view/ui-editor/components/preview/PreviewWorkspace.tsx +++ b/apps/ai-game-creator-shell/src/view/ui-editor/components/preview/PreviewWorkspace.tsx @@ -47,12 +47,21 @@ export function PreviewWorkspace({ useState('editor-overlay'); const [showFrame, setShowFrame] = useState(false); const tree = controller.treeForActiveImage ?? null; + const activeImagePixelWidth = activeImage?.pixel_size[0]; + const activeImagePixelHeight = activeImage?.pixel_size[1]; + const activeImagePixelsPerUnit = activeImage?.pixels_per_unit; const logicalSize = useMemo(() => { - if (!activeImage) return null; - const ppu = activeImage.pixels_per_unit; + if ( + activeImagePixelWidth === undefined || + activeImagePixelHeight === undefined || + activeImagePixelsPerUnit === undefined + ) { + return null; + } + const ppu = activeImagePixelsPerUnit; if (!Number.isFinite(ppu) || ppu <= 0) return null; - const width = activeImage.pixel_size[0] / ppu; - const height = activeImage.pixel_size[1] / ppu; + const width = activeImagePixelWidth / ppu; + const height = activeImagePixelHeight / ppu; if ( !Number.isFinite(width) || !Number.isFinite(height) || @@ -62,7 +71,7 @@ export function PreviewWorkspace({ return null; } return { width, height }; - }, [activeImage]); + }, [activeImagePixelHeight, activeImagePixelsPerUnit, activeImagePixelWidth]); const nodeInteractions = useNodeTransformInteraction({ activeImageId,