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