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が利用される
これまでに与えたパラメータを基にキャラクターを生成します。
---