'use client' import { useEffect, useRef } from 'react' /** * 游戏页面 * Phaser 通过动态 import 加载,确保 SSR 安全(不在服务端执行) */ export default function GamePage() { const gameRef = useRef<{ destroy: (removeCanvas: boolean) => void } | null>(null) useEffect(() => { let mounted = true const initGame = async () => { // 动态导入 Phaser,避免 SSR 环境报错 const Phaser = (await import('phaser')).default const { createGameConfig } = await import('@/game/config') const { createGameScene } = await import('@/game/GameScene') if (!mounted) return const GameScene = createGameScene(Phaser) const config = createGameConfig('game-container') // 注入场景 config.scene = [GameScene] // 手动设置 scale mode(避免 SSR 时引用 Phaser.Scale 常量报错) if (config.scale) { config.scale.mode = Phaser.Scale.FIT config.scale.autoCenter = Phaser.Scale.CENTER_BOTH } // type 设置 config.type = Phaser.AUTO gameRef.current = new Phaser.Game(config) } initGame().catch(console.error) return () => { mounted = false gameRef.current?.destroy(true) gameRef.current = null } }, []) return (
) }