1.8 KiB
1.8 KiB
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来控制游戏状态。
export class GameHost<TState extends Record<string, unknown>, TResult=unknown> {
// 获取游戏状态的只读快照
get state(): TState{}
// 获取随机数
get rng(): ReadonlyRNG{}
// 运行状态
readonly status: ReadonlySignal<GameHostStatus>;
// 运行中途需要玩家输入时使用
readonly activePromptSchema: ReadonlySignal<CommandSchema | null>;
readonly activePromptPlayer: ReadonlySignal<string | null>;
// 玩家响应activePrompt的输入,若报错则返回string,否则返回null
// promptDef应当从game module中导出
tryAnswerPrompt<TArgs extends any[]>(promptDef: Promptdef<TArgs>,...args: TArgs): string | null {}
// 添加中断,context.produceAsync会等待所有中断结束之后再继续
addInterruption(promise: Promise<void>): void {}
// 开始或者重新开始游戏
start(seed?: number): Promise<TResult>{}
// 销毁
dispose(): void {}
// 事件侦听
on(event: 'start' | 'dispose', listener: () => void): () => void {}
}