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よりはまぁやりやすいか。
型がわからなかったり、変数宣言が微妙だったりすると、
遊びで使ったりその場限りのツールならいいんですが、
マジモンのプロジェクトでは使いづらくって。
コメント
コメントを投稿