# boardgame-phaser 基于Phaser3/boardgame-core的游戏框架 ## 概述 项目使用pnpm monorepo管理,包含以下包: - `framework`:通用框架 - `boop-game`:boop样例 - `sample-game`:tic tac toe样例 游戏应当使用vite构建,基于`preact/signals`进行状态管理,使用`phaser3`实现游戏功能。 ## boardgame-core 项目使用`boardgame-core`进行游戏定义。 `boardgame-core`的内容可以在`framework/node_modules/boardgame-core`找到。 这个文件夹被.gitignore忽略,查看时需要绕开这一限制。 ## 编写Phaser App 使用`framework/src/ui/PhaserBridge`来创建Phaser App。 使用`framework/src/scenes/GameHostScene`来创建游戏场景。 使用`GameHost`来控制游戏状态。 ```typescript export class GameHost, TResult=unknown> { // 获取游戏状态的只读快照 get state(): TState{} // 获取随机数 get rng(): ReadonlyRNG{} // 运行状态 readonly status: ReadonlySignal; // 运行中途需要玩家输入时使用 readonly activePromptSchema: ReadonlySignal; readonly activePromptPlayer: ReadonlySignal; // 玩家响应activePrompt的输入,若报错则返回string,否则返回null // promptDef应当从game module中导出 tryAnswerPrompt(promptDef: Promptdef,...args: TArgs): string | null {} // 添加中断,context.produceAsync会等待所有中断结束之后再继续 addInterruption(promise: Promise): void {} // 开始或者重新开始游戏 start(seed?: number): Promise{} // 销毁 dispose(): void {} // 事件侦听 on(event: 'start' | 'dispose', listener: () => void): () => void {} } ``` 使用`Spawner`来创建动态游戏对象: - 卡牌 - 棋子 - UI高亮提示对象 使用`MutableSignal`创建状态信号。 ```typescript import {MutableSignal} from "boardgame-core" export const x = MutableSignal(0); x.produce(x => x + 1); ```