From e89eeaa502348e68fd41e43e701dcdf916d321ad Mon Sep 17 00:00:00 2001 From: tianmo Date: Tue, 10 Nov 2026 15:50:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81spine=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E7=BB=98=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/announcement.json | 20 ++--- src/editor/appendSceneConfig.ts | 3 +- src/editor/editorConfig.ts | 3 +- src/editor/sceneObjectClipboard.ts | 3 +- src/i18n/locales/de.json | 7 ++ src/i18n/locales/en.json | 7 ++ src/i18n/locales/es.json | 7 ++ src/i18n/locales/fr.json | 7 ++ src/i18n/locales/ja.json | 7 ++ src/i18n/locales/ko.json | 7 ++ src/i18n/locales/pt-BR.json | 7 ++ src/i18n/locales/ru.json | 7 ++ src/i18n/locales/zh-CN.json | 7 ++ src/i18n/locales/zh-TW.json | 7 ++ src/spine/SpineObjectPanel.vue | 84 +++++++++++++++++++- src/spine/SpineRuntimeLayer.ts | 118 ++++++++++++++++++++++++++++- src/spine/spineTypes.ts | 19 +++++ src/store/particleStore.ts | 4 + src/views/HelpDialog.vue | 6 ++ 19 files changed, 311 insertions(+), 19 deletions(-) diff --git a/public/announcement.json b/public/announcement.json index 08182ae..f2ec321 100644 --- a/public/announcement.json +++ b/public/announcement.json @@ -2,15 +2,15 @@ "enabled": true, "scrollDurationSeconds": 24, "messages": { - "zh-CN": "2026-11-04更新:修正路径跟随导出效果。", - "zh-TW": "2026-11-04更新:修正路徑跟隨匯出效果。", - "en": "Updated 2026-11-04: fixed path-following in exports.", - "ja": "2026-11-04 更新:パス追従のエクスポート結果を修正しました。", - "ko": "2026-11-04 업데이트: 경로 추적 내보내기 결과를 수정했습니다.", - "ru": "Обновление от 04.11.2026: исправлен экспорт со следованием по пути.", - "fr": "Mise à jour du 04/11/2026 : correction du suivi de trajectoire lors de l’exportation.", - "de": "Update vom 04.11.2026: Der Export mit Pfadverfolgung wurde korrigiert.", - "pt-BR": "Atualização de 04/11/2026: corrigida a exportação com acompanhamento de trajetória.", - "es": "Actualización del 04/11/2026: corregida la exportación con seguimiento de trayectoria." + "zh-CN": "2026-11-10更新:Spine 显示支持骨架、蒙皮区域和裁切绘制", + "zh-TW": "2026-11-10更新:Spine 顯示支援骨架、蒙皮區域與裁切繪製", + "en": "Updated 2026-11-10: Spine display supports skeleton, skinned regions, and clipping rendering.", + "ja": "2026-11-10 更新:Spine 表示でスケルトン、スキン領域、クリッピング描画に対応しました。", + "ko": "2026-11-10 업데이트: Spine 표시에서 스켈레톤, 스킨 영역 및 클리핑 렌더링을 지원합니다.", + "ru": "Обновление от 10.11.2026: отображение Spine поддерживает скелет, области скина и отрисовку обрезки.", + "fr": "Mise à jour du 10/11/2026 : l’affichage Spine prend en charge le squelette, les zones de peau et le rendu des masques.", + "de": "Update vom 10.11.2026: Die Spine-Anzeige unterstützt Skelett, Skin-Bereiche und Clipping-Darstellung.", + "pt-BR": "Atualização de 10/11/2026: a exibição do Spine agora oferece suporte a esqueleto, áreas de pele e renderização de recorte.", + "es": "Actualización del 10/11/2026: la visualización de Spine admite esqueleto, áreas de piel y representación de recortes." } } diff --git a/src/editor/appendSceneConfig.ts b/src/editor/appendSceneConfig.ts index 2dcdfe7..d40d1bf 100644 --- a/src/editor/appendSceneConfig.ts +++ b/src/editor/appendSceneConfig.ts @@ -1,5 +1,5 @@ import type { CollisionBody, ParticleSystem, ScenePath, useParticleStore } from '../store/particleStore' -import type { SpineSceneObject } from '../spine/spineTypes' +import { ensureSpineDisplaySettings, type SpineSceneObject } from '../spine/spineTypes' import { ensureEmitterConfig } from '../core/particleEmitter' import { registerSpineAsset } from '../spine/spineAssetRegistry' import { translate } from '../i18n' @@ -52,6 +52,7 @@ export async function appendEditorConfigText(store: EditorStore, text: string) { for (const spine of spines) { if (spine.sourceBundle == null) spine.sourceBundle = null if (spine.dataVersion == null) spine.dataVersion = '' + ensureSpineDisplaySettings(spine) if (!Array.isArray(spine.slots)) spine.slots = [] if (typeof spine.selectedBone !== 'string') spine.selectedBone = '' if (typeof spine.selectedSlot !== 'string') spine.selectedSlot = '' diff --git a/src/editor/editorConfig.ts b/src/editor/editorConfig.ts index c8c3091..472b8c7 100644 --- a/src/editor/editorConfig.ts +++ b/src/editor/editorConfig.ts @@ -10,7 +10,7 @@ import type { SettingsState, useParticleStore, } from '../store/particleStore' -import type { SpineSceneObject } from '../spine/spineTypes' +import { ensureSpineDisplaySettings, type SpineSceneObject } from '../spine/spineTypes' import { parseSpineBundle, type ParsedSpineBundle } from '../spine/spineAssetLoader' import { restoreSpineSource } from '../spine/spineSourceBundle' import { registerSpineAsset, releaseSpineAsset } from '../spine/spineAssetRegistry' @@ -268,6 +268,7 @@ export async function applyEditorConfig(store: EditorStore, input: EditorConfigF for (const spine of spines) { if (spine.sourceBundle == null) spine.sourceBundle = null if (spine.dataVersion == null) spine.dataVersion = '' + ensureSpineDisplaySettings(spine) if (!Array.isArray(spine.slots)) spine.slots = [] if (typeof spine.selectedBone !== 'string') spine.selectedBone = '' if (typeof spine.selectedSlot !== 'string') spine.selectedSlot = '' diff --git a/src/editor/sceneObjectClipboard.ts b/src/editor/sceneObjectClipboard.ts index 6308a05..8fd0711 100644 --- a/src/editor/sceneObjectClipboard.ts +++ b/src/editor/sceneObjectClipboard.ts @@ -5,7 +5,7 @@ import type { ScenePath, useParticleStore, } from '../store/particleStore' -import type { SpineSceneObject } from '../spine/spineTypes' +import { ensureSpineDisplaySettings, type SpineSceneObject } from '../spine/spineTypes' import { registerSpineAsset, releaseSpineAsset } from '../spine/spineAssetRegistry' import { ensureEmitterConfig } from '../core/particleEmitter' import { collectEmitterAncestors } from '../core/subEmitterIds' @@ -237,6 +237,7 @@ export async function pasteSceneObjectFromClipboard(store: EditorStore, type: Sc const spine = cloneEditorValue(payload.object as SpineSceneObject) spine.id = target.id spine.name = target.name + ensureSpineDisplaySettings(spine) spine.selectedBone = '' spine.selectedSlot = '' spine.assetVersion = target.assetVersion + 1 diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json index 79469b6..d7e53dd 100644 --- a/src/i18n/locales/de.json +++ b/src/i18n/locales/de.json @@ -735,6 +735,10 @@ }, "spine": { "title": "Spine-Eigenschaften", + "skeleton": "Bone", + "onlySkinMesh": "Mesh", + "allRegions": "Region", + "allClipping": "Clipping", "name": "Spine-Name", "xPosition": "X-Position", "yPosition": "Y-Position", @@ -796,6 +800,9 @@ "tabsLabel": "Hilfebereiche", "updates": "Versionshinweise", "updatesSubtitle": "Aktuelle Funktionsupdates anzeigen", + "releaseSummaryV11110": "V1.11.10 aktualisiert", + "releaseHeadingV11110": "Update vom 10.11.2026:", + "releaseSpineHelpers": "Die Spine-Anzeige unterstützt Skelett, Skin-Bereiche und Clipping-Darstellung.", "releaseSummaryV11109": "V1.11.09 aktualisiert", "releaseHeadingV11109": "Update vom 09.11.2026:", "releaseSceneClipboard": "Kopieren und Einfügen einzelner Szenenobjekte zur Wiederverwendung hinzugefügt.", diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 1a885ca..7c6874e 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -758,6 +758,10 @@ }, "spine": { "title": "Spine Properties", + "skeleton": "Bone", + "onlySkinMesh": "Mesh", + "allRegions": "Region", + "allClipping": "Clipping", "name": "Spine name", "xPosition": "X position", "yPosition": "Y position", @@ -819,6 +823,9 @@ "tabsLabel": "Help sections", "updates": "Release Notes", "updatesSubtitle": "View recent feature updates", + "releaseSummaryV11110": "Updated to V1.11.10", + "releaseHeadingV11110": "Updated 2026-11-10:", + "releaseSpineHelpers": "Spine display supports skeleton, skinned regions, and clipping rendering.", "releaseSummaryV11109": "Updated to V1.11.09", "releaseHeadingV11109": "Updated 2026-11-09:", "releaseSceneClipboard": "Added copy and paste for individual scene objects.", diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json index e4356ee..635a52a 100644 --- a/src/i18n/locales/es.json +++ b/src/i18n/locales/es.json @@ -735,6 +735,10 @@ }, "spine": { "title": "Propiedades de Spine", + "skeleton": "Bone", + "onlySkinMesh": "Mesh", + "allRegions": "Region", + "allClipping": "Clipping", "name": "Nombre Spine", "xPosition": "Posición X", "yPosition": "Posición Y", @@ -796,6 +800,9 @@ "tabsLabel": "Secciones de ayuda", "updates": "Actualizaciones de versión", "updatesSubtitle": "Ver actualizaciones recientes de funciones", + "releaseSummaryV11110": "Actualizado a V1.11.10", + "releaseHeadingV11110": "Actualización del 10/11/2026:", + "releaseSpineHelpers": "La visualización de Spine admite esqueleto, áreas de piel y representación de recortes.", "releaseSummaryV11109": "Actualizado a V1.11.09", "releaseHeadingV11109": "Actualización del 09/11/2026:", "releaseSceneClipboard": "Añadida la copia y el pegado de objetos de escena individuales para reutilizarlos.", diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json index 906926e..e2e6440 100644 --- a/src/i18n/locales/fr.json +++ b/src/i18n/locales/fr.json @@ -735,6 +735,10 @@ }, "spine": { "title": "Propriétés Spine", + "skeleton": "Bone", + "onlySkinMesh": "Mesh", + "allRegions": "Region", + "allClipping": "Clipping", "name": "Nom Spine", "xPosition": "Position X", "yPosition": "Position Y", @@ -796,6 +800,9 @@ "tabsLabel": "Sections de l’aide", "updates": "Mises à jour", "updatesSubtitle": "Voir les mises à jour récentes des fonctionnalités", + "releaseSummaryV11110": "Mis à jour vers V1.11.10", + "releaseHeadingV11110": "Mise à jour du 10/11/2026 :", + "releaseSpineHelpers": "L’affichage Spine prend en charge le squelette, les zones de peau et le rendu des masques.", "releaseSummaryV11109": "Mis à jour vers V1.11.09", "releaseHeadingV11109": "Mise à jour du 09/11/2026 :", "releaseSceneClipboard": "Ajout de la copie et du collage d’objets de scène individuels pour les réutiliser.", diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index 30d7818..95187a8 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -735,6 +735,10 @@ }, "spine": { "title": "Spine プロパティ", + "skeleton": "Bone", + "onlySkinMesh": "Mesh", + "allRegions": "Region", + "allClipping": "Clipping", "name": "Spine 名前", "xPosition": "X 位置", "yPosition": "Y 位置", @@ -796,6 +800,9 @@ "tabsLabel": "ヘルプのセクション", "updates": "バージョン更新", "updatesSubtitle": "最近の機能更新を見る", + "releaseSummaryV11110": "V1.11.10 更新済み", + "releaseHeadingV11110": "2026-11-10 更新:", + "releaseSpineHelpers": "Spine 表示でスケルトン、スキン領域、クリッピング描画に対応しました。", "releaseSummaryV11109": "V1.11.09 更新済み", "releaseHeadingV11109": "2026-11-09 更新:", "releaseSceneClipboard": "個別のシーンオブジェクトを再利用できるコピー&ペーストを追加しました。", diff --git a/src/i18n/locales/ko.json b/src/i18n/locales/ko.json index b43e42e..2a1eff8 100644 --- a/src/i18n/locales/ko.json +++ b/src/i18n/locales/ko.json @@ -735,6 +735,10 @@ }, "spine": { "title": "Spine 속성", + "skeleton": "Bone", + "onlySkinMesh": "Mesh", + "allRegions": "Region", + "allClipping": "Clipping", "name": "Spine 이름", "xPosition": "X 위치", "yPosition": "Y 위치", @@ -796,6 +800,9 @@ "tabsLabel": "도움말 섹션", "updates": "버전 업데이트", "updatesSubtitle": "최근 기능 업데이트 보기", + "releaseSummaryV11110": "V1.11.10 업데이트됨", + "releaseHeadingV11110": "2026-11-10 업데이트:", + "releaseSpineHelpers": "Spine 표시에서 스켈레톤, 스킨 영역 및 클리핑 렌더링을 지원합니다.", "releaseSummaryV11109": "V1.11.09 업데이트됨", "releaseHeadingV11109": "2026-11-09 업데이트:", "releaseSceneClipboard": "개별 장면 객체를 재사용할 수 있는 복사 및 붙여넣기를 추가했습니다.", diff --git a/src/i18n/locales/pt-BR.json b/src/i18n/locales/pt-BR.json index 4e91f29..ce4b1b7 100644 --- a/src/i18n/locales/pt-BR.json +++ b/src/i18n/locales/pt-BR.json @@ -735,6 +735,10 @@ }, "spine": { "title": "Propriedades do Spine", + "skeleton": "Bone", + "onlySkinMesh": "Mesh", + "allRegions": "Region", + "allClipping": "Clipping", "name": "Nome Spine", "xPosition": "Posição X", "yPosition": "Posição Y", @@ -796,6 +800,9 @@ "tabsLabel": "Seções da ajuda", "updates": "Atualizações da versão", "updatesSubtitle": "Ver atualizações recentes de recursos", + "releaseSummaryV11110": "Atualizado para V1.11.10", + "releaseHeadingV11110": "Atualização de 10/11/2026:", + "releaseSpineHelpers": "A exibição do Spine agora oferece suporte a esqueleto, áreas de pele e renderização de recorte.", "releaseSummaryV11109": "Atualizado para V1.11.09", "releaseHeadingV11109": "Atualização de 09/11/2026:", "releaseSceneClipboard": "Adicionada cópia e colagem de objetos de cena individuais para reutilização.", diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index 0cd4999..2baea52 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json @@ -758,6 +758,10 @@ }, "spine": { "title": "Свойства Spine", + "skeleton": "Bone", + "onlySkinMesh": "Mesh", + "allRegions": "Region", + "allClipping": "Clipping", "name": "Имя Spine", "xPosition": "Позиция X", "yPosition": "Позиция Y", @@ -819,6 +823,9 @@ "tabsLabel": "Разделы справки", "updates": "Обновления версии", "updatesSubtitle": "Последние обновления функций", + "releaseSummaryV11110": "Обновлено до V1.11.10", + "releaseHeadingV11110": "Обновление от 10.11.2026:", + "releaseSpineHelpers": "Отображение Spine поддерживает скелет, области скина и отрисовку обрезки.", "releaseSummaryV11109": "Обновлено до V1.11.09", "releaseHeadingV11109": "Обновление от 09.11.2026:", "releaseSceneClipboard": "Добавлены копирование и вставка отдельных объектов сцены для их повторного использования.", diff --git a/src/i18n/locales/zh-CN.json b/src/i18n/locales/zh-CN.json index b256182..bd31601 100644 --- a/src/i18n/locales/zh-CN.json +++ b/src/i18n/locales/zh-CN.json @@ -758,6 +758,10 @@ }, "spine": { "title": "Spine 属性", + "skeleton": "Bone", + "onlySkinMesh": "Mesh", + "allRegions": "Region", + "allClipping": "Clipping", "name": "Spine 名称", "xPosition": "X 位置", "yPosition": "Y 位置", @@ -819,6 +823,9 @@ "tabsLabel": "使用说明栏目", "updates": "版本更新", "updatesSubtitle": "查看近期功能更新记录", + "releaseSummaryV11110": "V1.11.10 已更新", + "releaseHeadingV11110": "2026-11-10更新:", + "releaseSpineHelpers": "Spine 显示支持骨架、蒙皮区域和裁切绘制", "releaseSummaryV11109": "V1.11.09 已更新", "releaseHeadingV11109": "2026-11-09更新:", "releaseSceneClipboard": "新增场景对象的复制与粘贴,方便单独对场景对象进行复用", diff --git a/src/i18n/locales/zh-TW.json b/src/i18n/locales/zh-TW.json index 2b3d145..3783c70 100644 --- a/src/i18n/locales/zh-TW.json +++ b/src/i18n/locales/zh-TW.json @@ -735,6 +735,10 @@ }, "spine": { "title": "Spine 屬性", + "skeleton": "Bone", + "onlySkinMesh": "Mesh", + "allRegions": "Region", + "allClipping": "Clipping", "name": "Spine 名稱", "xPosition": "X 位置", "yPosition": "Y 位置", @@ -796,6 +800,9 @@ "tabsLabel": "使用說明欄目", "updates": "版本更新", "updatesSubtitle": "查看近期功能更新記錄", + "releaseSummaryV11110": "V1.11.10 已更新", + "releaseHeadingV11110": "2026-11-10更新:", + "releaseSpineHelpers": "Spine 顯示支援骨架、蒙皮區域與裁切繪製", "releaseSummaryV11109": "V1.11.09 已更新", "releaseHeadingV11109": "2026-11-09更新:", "releaseSceneClipboard": "新增場景物件的複製與貼上,方便單獨重複使用場景物件", diff --git a/src/spine/SpineObjectPanel.vue b/src/spine/SpineObjectPanel.vue index e87fd1c..3944cef 100644 --- a/src/spine/SpineObjectPanel.vue +++ b/src/spine/SpineObjectPanel.vue @@ -1,6 +1,78 @@