From 4e10a86c97ca5ebd06097dc498503fbb7abc0136 Mon Sep 17 00:00:00 2001 From: Mahiru Date: Sun, 22 Dec 2024 18:44:14 +0800 Subject: [PATCH] fix: handle spine with .json, fix spine pivot problem --- .../src/Core/controller/stage/pixi/PixiController.ts | 10 ++++++---- packages/webgal/src/Stage/MainStage/useSetFigure.ts | 5 ++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/webgal/src/Core/controller/stage/pixi/PixiController.ts b/packages/webgal/src/Core/controller/stage/pixi/PixiController.ts index ddd8aac00..f4c6833a2 100644 --- a/packages/webgal/src/Core/controller/stage/pixi/PixiController.ts +++ b/packages/webgal/src/Core/controller/stage/pixi/PixiController.ts @@ -610,7 +610,12 @@ export default class PixiStage { setTimeout(() => { if (spineResource && this.getStageObjByUuid(figureUuid)) { const figureSpine = new Spine(spineResource.spineData); - const transY = spineResource?.spineData?.y ?? 0; + const spineBounds = figureSpine.getLocalBounds(); + const spineCenterX = spineBounds.x + spineBounds.width / 2; + const spineCenterY = spineBounds.y + spineBounds.height / 2; + figureSpine.pivot.set(spineCenterX, spineCenterY); + // TODO: set animation 还没做 + // figureSpine.state.setAnimation() /** * 重设大小 */ @@ -618,9 +623,6 @@ export default class PixiStage { const originalHeight = figureSpine.height; const scaleX = this.stageWidth / originalWidth; const scaleY = this.stageHeight / originalHeight; - // 我也不知道为什么啊啊啊啊 - figureSpine.y = -(scaleY * transY) / 2; - figureSpine.state.setAnimation(0, '07', true); const targetScale = Math.min(scaleX, scaleY); const figureSprite = new PIXI.Sprite(); figureSprite.addChild(figureSpine); diff --git a/packages/webgal/src/Stage/MainStage/useSetFigure.ts b/packages/webgal/src/Stage/MainStage/useSetFigure.ts index 425323a93..f601183e8 100644 --- a/packages/webgal/src/Stage/MainStage/useSetFigure.ts +++ b/packages/webgal/src/Stage/MainStage/useSetFigure.ts @@ -207,9 +207,12 @@ function removeFig(figObj: IStageObject, enterTikerKey: string, effects: IEffect function addFigure(type?: 'image' | 'live2D' | 'spine', ...args: any[]) { const url = args[1]; + const baseUrl = window.location.origin; + const urlObject = new URL(url, baseUrl); + const _type = urlObject.searchParams.get('type') as 'image' | 'live2D' | 'spine' | null; if (url.endsWith('.json')) { return addLive2dFigure(...args); - } else if (url.endsWith('.skel')) { + } else if (url.endsWith('.skel') || _type === 'spine') { // @ts-ignore return WebGAL.gameplay.pixiStage?.addSpineFigure(...args); } else {