@threeatom/gameframework-mvc-core
v1.1.12
Published
> TODO: description
Downloads
6
Readme
mvc-core
TODO: 游戏开发mvc模式
Usage
export class GameStartCommand extends Command {
public static readonly GameStartEvent: string = "GameStart";
OnExecute(): void {
console.log("GameStartCommand executed");
this.getModel<GameModel>(GameModel.CLASS_NAME).Count.Value = 0;
// 通知游戏开始
this.sendNotification(GameStartCommand.GameStartEvent);
}
}
export class GameEndCommand extends Command {
public static readonly GameEndEvent: string = "GameEnd";
OnExecute(): void {
console.log("GameEndCommand executed");
this.getModel<GameModel>(GameModel.CLASS_NAME).Count.Value = 100;
// 通知游戏结束
this.sendNotification(GameEndCommand.GameEndEvent);
}
}
export class GameController extends Controller {
initialize(): void {
this.registerEvent('GameStart', (data) => {
console.log(`Game start with data ${data}`);
this.runGame();
});
this.registerEvent('GameEnd', (data) => {
console.log(`Game end with data ${data}`);
});
}
runGame(){
for(let i = 0; i < 10; i++){
this.getModel<GameModel>(GameModel.CLASS_NAME).Count.Value = i;
console.log(`我得分: ${i}`);
}
//发送命令 游戏结束
this.executeCommand(new GameEndCommand());
};
}
export class GameModel extends Model {
getClassName(): string {
return GameModel.CLASS_NAME;
}
static CLASS_NAME: string="GameModel";
Count = new BindableProperty<number>(0);
initialize(): void {
this.Count.setValueWithoutEvent(0);
this.Count.register(new ValueChangedObserver((value) => {
console.log(`Count value changed to ${value}`);
}));
}
}
export class GameView extends View {
initialize() {
this.getModel<GameModel>(GameModel.CLASS_NAME).Count.register(new ValueChangedObserver((property) => {
this.showScore(property.Value);
}));
}
showScore(score: number) {
console.log(`渲染分数: ${score}`);
}
}
const mvc = MvcFramework.getInstance();
const gameController: GameController = new GameController();
mvc.registerModel(GameModel);
const gameView:GameView=new GameView(gameController);
mvc.executeCommand(new GameStartCommand());
const model = mvc.getModel<GameModel>(GameModel.CLASS_NAME);