Game Programming Patterns の 第8章 ダブルバッファのコメディ部分をTypeScriptで実装
Game Programming Patterns の 第8章 ダブルバッファのコメディ部分をTypeScriptで実装
お勉強。
1フレーム(update())ごとにバッファを入れ替える。
1フレーム(update())ごとにバッファを入れ替える。
ファイル一覧
- doubleBuffer.ts
実装
doubleBuffer.ts
- abstract class Actor {
- constructor(name: string) {
- this.name_ = name;
- this.currentSlapped_ = false;
- };
- abstract update(): void;
- public swap(): void {
- this.currentSlapped_ = this.nextSlapped_;
- this.nextSlapped_ = false;
- }
- public slap(): void { this.nextSlapped_ = true };
- public getname(): string { return this.name_ }
- protected wasSlapped(): boolean { return this.currentSlapped_ };
- protected name_: string;
- private currentSlapped_: boolean;
- private nextSlapped_: boolean;
- }
- class Commedian extends Actor {
- // 顔の向き
- public face(actor: Actor) { this.facing_ = actor };
- public update(): void {
- // console.log("name,wasSlapped : " + this.name_ + "," + this.wasSlapped())
- if (this.wasSlapped()) {
- // 自分が叩かれてたら、こんどは顔が向いている方向にいる役者を叩く(どんなコメディだよ)
- this.facing_.slap()
- console.log(this.name_ + "が" + this.facing_.getname() + "を叩く★★★★★★★★★★★★。")
- } else {
- console.log(this.name_ + "が" + this.facing_.getname() + "を叩かない。")
- }
- }
- private facing_: Actor;
- }
- class Stage {
- public add(actor: Actor, id: number): void {
- this.actors_[id] = actor;
- }
- public update(): void {
- this.actors_.forEach(actor => {
- actor.update();
- });
- this.actors_.forEach(actor => {
- actor.swap();
- });
- console.log("幕間1フレーム-------------------------------------")
- }
- public reset(): void {
- this.actors_.length = 0;
- console.log("reset : ------------------")
- }
- private actors_: Array
= [] } // ここから本処理 //準備 let stage: Stage = new Stage(); let aaa: Commedian = new Commedian("aaa"); let bbb: Commedian = new Commedian("bbb"); let ccc: Commedian = new Commedian("ccc"); aaa.face(bbb); bbb.face(ccc); ccc.face(aaa); stage.add(aaa, 0) stage.add(bbb, 1) stage.add(ccc, 2) // 動かす aaa.slap(); //まず叩く。 stage.update(); // コメディスタート : このフレームでは誰も叩かない stage.update(); // aaaがbbbを叩く stage.update(); // bbbがcccを叩く stage.update(); // cccがaaaを叩く stage.reset(); stage.add(aaa, 2); stage.add(bbb, 1); stage.add(ccc, 0); stage.update(); // aaaがbbbを叩く stage.update(); // bbbがcccを叩く stage.update(); // ccc->aaa stage.update(); // aaa->bbb stage.update(); // bbb->ccc
所感
TypeScript、まぁ書きやすいか。自分は古い人なので、javaScriptよりはまぁやりやすいか。
型がわからなかったり、変数宣言が微妙だったりすると、
遊びで使ったりその場限りのツールならいいんですが、
マジモンのプロジェクトでは使いづらくって。
コメント
コメントを投稿