ポイント
HistoryLayerクラスを継承
HistoryLayerクラスを継承し改造版履歴レイヤクラス(仮にMyHistoryLayerとする)を実装する。
必要に応じて画像・効果音素材なども用意する。
class MyHistoryLayer extends HistoryLayer { // ... }
KAGWindowクラスを継承
Override.tjsに、KAGWindowクラスを継承した改造版KAGメインウィンドウクラス(仮にMyKAGWindowとする)を記述する。
コンストラクタでメンバ変数historyLayerをMyHistoryLayerオブジェクトに繋ぎ換える。
// Override.tjs
class MyKAGWindow extends KAGWindow { // コンストラクタ function MyKAGWindow(ismain = true, width = 0, height = 0) { super.KAGWindow(ismain, width, height);
// 本来の履歴レイヤを管理オブジェクトのリストから外し、無効化してしまう remove(historyLayer); invalidate historyLayer;
// 改造版履歴レイヤを作成し、管理オブジェクトのリストに登録 historyLayer = new MyHistoryLayer(this, fore.base); add(historyLayer); }
// デストラクタ function finalize() { super.finalize(); } }
global.kag = new MyKAGWindow() if typeof global.kag == "undefined";
※この程度なら、直接KAGWindowクラスを改造しても構わないと思う。
HistoryLayerクラスの仕様に関して
HistoryLayerクラスを継承する上でネックとなる点は以下の通り。
凝ったことをさせるなら直接改造した方が早いかも知れない。
- 無地(黒)の画像の上にメッセージを描画する前提で記述されている。マウスホイールでスクロールする際、レイヤ画像を上下(または左右)にコピーし、足りないメッセージを補充するような実装になっている
- 例えば、任意の画像を表示させるには、MyHistoryLayerオブジェクトを透明にし、奥に画像表示用レイヤ(KAGLayerオブジェクト)を敷くか、関連するメソッドを全てオーバーライドする
- Config.tjsのeverypageをtrue固定にして構わないなら、HistoryLayer.clearBack()メソッド内でloadImages()を呼び出し、任意の画像を表示させる方法が簡単である
- メンバ変数controlHeightは「次ページ」「前ページ」「×」ボタンの高さ(ピクセル)を意味しているが、画面上部に配置する前提で使われている
- スクロール用コントロールを画面の上下左右に配置させるには、この値を0にし、marginL, marginR, marginT, marginB(上下左右のマージン)で辻褄合わせする方が手っ取り早い