From 713a14c128e6b4c62517b1308551ac32cd278992 Mon Sep 17 00:00:00 2001 From: hyper Date: Sun, 12 Apr 2026 17:21:49 +0800 Subject: [PATCH] refactor: simplify scene routing --- packages/sample-game/src/main.tsx | 4 +-- packages/sample-game/src/scenes/MenuScene.ts | 3 +- packages/sample-game/src/ui/App.tsx | 36 ++++++++------------ 3 files changed, 16 insertions(+), 27 deletions(-) diff --git a/packages/sample-game/src/main.tsx b/packages/sample-game/src/main.tsx index ceaca85..013e785 100644 --- a/packages/sample-game/src/main.tsx +++ b/packages/sample-game/src/main.tsx @@ -1,13 +1,11 @@ import { h } from 'preact'; import { GameUI } from 'boardgame-phaser'; -import * as gameModule from './game/tic-tac-toe'; import './style.css'; import App from "@/ui/App"; -import {GameScene} from "@/scenes/GameScene"; const ui = new GameUI({ container: document.getElementById('ui-root')!, - root: , + root: , }); ui.mount(); diff --git a/packages/sample-game/src/scenes/MenuScene.ts b/packages/sample-game/src/scenes/MenuScene.ts index 524f5c2..df5a95e 100644 --- a/packages/sample-game/src/scenes/MenuScene.ts +++ b/packages/sample-game/src/scenes/MenuScene.ts @@ -79,7 +79,6 @@ export class MenuScene extends ReactiveScene { } private async startGame(): Promise { - const data = this.initData as unknown as Record; - await this.sceneController.launch('GameScene', data); + await this.sceneController.launch('GameScene'); } } diff --git a/packages/sample-game/src/ui/App.tsx b/packages/sample-game/src/ui/App.tsx index 6c22027..ff7ff41 100644 --- a/packages/sample-game/src/ui/App.tsx +++ b/packages/sample-game/src/ui/App.tsx @@ -1,35 +1,27 @@ -import {useComputed, useSignalEffect} from '@preact/signals'; -import { createGameHost, type GameModule } from 'boardgame-core'; +import { createGameHost } from 'boardgame-core'; import { h } from 'preact'; -import {PhaserGame, PhaserScene, ReactiveScene, phaserContext} from 'boardgame-phaser'; -import {useContext} from 'preact/hooks'; +import {PhaserGame, PhaserScene } from 'boardgame-phaser'; import {MenuScene} from "@/scenes/MenuScene"; +import {useMemo} from "preact/hooks"; +import * as gameModule from '../game/tic-tac-toe'; +import {GameScene} from "@/scenes/GameScene"; -export default function App>(props: { gameModule: GameModule, gameScene: { new(): ReactiveScene } }) { +export default function App() { - const gameHost = useComputed(() => { - const gameHost = createGameHost(props.gameModule); + const gameHost = useMemo(() => { + const gameHost = createGameHost(gameModule); return { gameHost }; - }); + }, []); - const gameScene = useComputed(() => new props.gameScene()); - const menuScene = useComputed(() => new MenuScene()); - - // 自动启动菜单场景 - const phaserSignal = useContext(phaserContext); - useSignalEffect(() => { - const ctx = phaserSignal?.value; - if (ctx?.sceneController) { - ctx.sceneController.launch('MenuScene', { gameHost: gameHost.value }); - } - }); + const gameScene = useMemo(() => new GameScene(), []); + const menuScene = useMemo(() => new MenuScene(), []); return (
- - - + + +