CharacterFactoryは、Characterの作成を助けるクラスです。 これが、Characterの概要で解説した、大きなキャラクターチップ画像を使った場合に利用するスクリプトです。
window.onload = function() {
	var game = new Game(480, 480);
	game.preload({eye: "eye-multi.png"});
	game.loaded.handle(function() {
		var charaLeft = new Character(32, 32, game.r("eye"));
		charaLeft.charaCol = 2;
		charaLeft.charaSeq = 0;
		charaLeft.angle(Angle.left);
		charaLeft.moveTo(0, 100);
		var charaRight = new Character(32, 32, game.r("eye"));
		charaRight.charaCol = 2;
		charaRight.charaSeq = 1;
		charaRight.angle(Angle.right);
		charaRight.moveTo(32, 100);
		var charaUp = new Character(32, 32, game.r("eye"));
		charaUp.charaCol = 2;
		charaUp.charaSeq = 2;
		charaUp.angle(Angle.up);
		charaUp.moveTo(64, 100);
		var charaDown = new Character(32, 32, game.r("eye"));
		charaDown.charaCol = 2;
		charaDown.charaSeq = 3;
		charaDown.angle(Angle.down);
		charaDown.moveTo(96, 100);
		game.currentScene.append(charaLeft);
		game.currentScene.append(charaRight);
		game.currentScene.append(charaUp);
		game.currentScene.append(charaDown);
	});
}
CharacterFactoryを利用すると、このように単純化出来ます。
window.onload = function() {
	var game = new Game(480, 480);
	game.preload({eye: "eye-multi.png"});
	game.loaded.handle(function() {
		var f = new CharacterFactory(32, 32, game.r("eye"));
		f.charaCol = 2;
		game.currentScene.append(f.create(0, {x:0,y:100}, Angle.left));
		game.currentScene.append(f.create(1, {x:32,y:100}, Angle.right));
		game.currentScene.append(f.create(2, {x:64,y:100}, Angle.up));
		game.currentScene.append(f.create(3, {x:96,y:100}, Angle.down));
	});
}
CharacterFactoryは、Character作成に必要なパラメータを事前にセットしておく事で、そのパラメータを使い回してCharacterクラスを生成します。 同様のコードを何度も記述する開発者の手間を省く事をサポートしてくれるでしょう。
var factory = new CharacterFactory(32, 32, game.r("chara")); 横幅、縦幅、画像を指定してインスタンスを生成します。 一般的に、CharacterFactoryには複数のキャラクター画像がセットになった大きめの画像を渡します。
charaCol: number;//キャラクターチップに利用される画像が、横一列でいくつのキャラを保持しているかを示す animeCnt: number;//キャラクターチップに利用される画像が、何フレームのアニメーションを持っているかを示す movePixel: number;//一度の移動で移動するピクセル数 moveFrame: number;//一度の移動に要するフレーム数 image: HTMLImageElement;//キャラクターの作成に利用する画像 width: number;//キャラクターの横幅 height: number;//キャラクターの縦幅 wait: number;//キャラクターのアニメーション間隔 angle: Angle;//キャラクターの向き createClass: any;//生成するキャラクターのクラス。例えば、Characterを継承したEnemyCharacterクラスがある場合、それを指定する angleSeq:any;//キャラチップの方向順。フィールド未定義の場合は下左右上。このフィールドの正確な型は{[key:Angle]: number; }です(TypeScriptで定義不可)。
create(charaSeq:number, offset?: CommonOffset, angle?:Angle) { charaSeq:number;//生成するキャラクターのキャラ番号 offset?: CommonOffset;//生成するキャラクターの位置。省略時はx:0, y:0となる angle?:Angle;//生成するキャラクターの向き。省略時はフィールドのangleが利用される これまでに与えたパラメータを基にキャラクターを生成します。 ---
CharacterFactorクラスは、定義されていないプロパティの値もCharacterクラスに設定する事が出来ます。 例えば、以下のようにhpフィールドをCharacterFactoryクラスに指定してからcreateでCharacterを生成すると、そのCharacterクラスのインスタンスもhpフィールドに100の値を持った状態で生成されます。
f.hp = 100;
createClassフィールドでCharacterクラス以外のクラスを指定した場合などに活用出来るでしょう。