超簡単なAnimationLayer

アニメーションGIF的な簡素なAnimationLayerを作ってみました。
//アニメーションレイヤ
class AnimationLayer extends BaseLayer {
var repeat = false; //アニメーションを繰り返すかどうか
var timer; //タイマオブジェクト
var frameWidth; //横幅
var frameHeight; //高さ
//コンストラクタ
function AnimationLayer(owner, parent, image, width, height, interval) {
super.BaseLayer(owner, parent);
frameWidth = width;
frameHeight = height;
loadImages(image);
timer = new Timer(handler, "");
timer.capacity = 0;
timer.interval = interval;
}
//デストラクタ
function finalize() {
invalidate timer;
super.finalize();
}
//タイマのハンドラ
function handler() {
if(++frame == count && !repeat) {
stop();
onCompleted();
}
}
//アニメーション開始
function start() {
timer.enabled = true;
}
//アニメーション一時停止
function stop() {
timer.enabled = false;
}
//アニメーション停止
function reset() {
timer.enabled = false;
frame = 1;
}
//画像読み込みの際にサイズと位置の初期化
function loadImages(image) {
var tag = super.loadImages(image);
setSize(frameWidth, frameHeight);
setImagePos(0, 0);
return tag;
}
//現在のフレーム
property frame {
setter(v) {
v = 1 if (v > count || v < 1);
onFrame() if timer.enabled;
imageLeft = -(width * (v - 1));
}
getter {
return -(imageLeft \\ width) + 1;
}
}
//フレーム数
property count {
getter {
return imageWidth \\ width;
}
}
//フレームが切り替わったときに呼ばれるイベントハンドラ
function onFrame() {
}
//アニメーションが終了したときに呼ばれるイベントハンドラ
function onCompleted() {
}
}
基本的にKAG3って、吉里吉里のほぼ全ての機能をシナリオファイルで記述出来るようにっていう設計思想で作られてますよね。
個人的に、そのあたりがどうも肌に合わないです。
ブラックボックスが増える、シナリオファイルの記述が複雑になるといったデメリットがすんごい高い壁なんですよね、KAYとしては。
こんくらい簡単なのでいいんだけどなあ……。



