Section 4.3 レイヤを使ったプラグイン

今回は、まずレイヤを使って簡単なプラグインを作ってみるね。
うん!
今回作るのはプラグインって言っても、単にレイヤを表示するだけなんだけど…
スクリプトはこんな感じ。

<レイヤを持つ KAG プラグインの例(LayerPlugin クラス)>

; KAG スクリプトとして読み込めるようにします
[iscript]

class LayerPlugin extends KAGPlugin
{
    var foreLay;  // 表画面用のレイヤ
    var backLay;  // 裏画面用のレイヤ

    // コンストラクタ
    function LayerPlugin()
    {
        super.KAGPlugin();  // スーパークラスのコンストラクタを呼び出します

        // 表画面用のレイヤを作ります
        foreLay = new Layer(kag, kag.fore.base);  // 表画面の背景レイヤを親レイヤにします
        with(foreLay)
        {
            .setSize(128, 128);  // サイズを 128×128 ピクセルにします
            .setPos(64, 64);  // 位置を (64, 64) に設定します
            .fillRect(0, 0, .width, .height, 0xFFFF0000);  // レイヤ内を赤色で塗りつぶします
            .visible = true;  // 表示状態にします
        }

        // 裏画面用のレイヤを作ります
        backLay = new Layer(kag, kag.back.base);  // 裏画面の背景レイヤを親レイヤにします
        with(backLay)
        {
            .setSize(128, 128);  // サイズを 128×128 ピクセルにします
            .setPos(64, 64);  // 位置を (64, 64) に設定します
            .fillRect(0, 0, .width, .height, 0xFF0000FF);  // レイヤ内を青色で塗りつぶします
            .visible = true;  // 表示状態にします
        }
    }

    // デストラクタ
    function finalize()
    {
        invalidate foreLay;  // 表画面用のレイヤを無効化します
        invalidate backLay;  // 裏画面用のレイヤを無効化します

        super.finalize();  // スーパークラスのデストラクタを呼び出します
    }
}

// プラグインオブジェクトを作って kag オブジェクトに登録します
kag.addPlugin(new LayerPlugin());

[endscript]

; call タグで読み込めるように、最後に return タグを書きます
[return]

わ、結構長いね…
でもやってることは単純だから、すぐ解ると思うよ。
そうなの?
うん。
じゃあ、まずはこのスクリプトを LayerPlugin.ks っていう名前のファイルに保存して。
ここからダウンロードしてもいいよ。
おっけ〜。
あと、first.ks に…

LayerPlugin を使うための KAG スクリプト>

; プラグインを作るスクリプトを読み込みます
[call storage="LayerPlugin.ks"]

; 1秒待ちます
[wait time=1000]

; トランジションして表画面と裏画面を入れ替えます
[trans method=crossfade time=1000]
[wt]

このスクリプトを書き込んで実行してみて。
はーい!

<実行結果>

実行結果

最初は赤いレイヤが表示されてたけど、トランジションの後はレイヤが青くなったね。
ん、表画面のレイヤは赤色に塗ってて、裏画面のレイヤは青色に塗ってるからね。
んじゃ、プラグインのスクリプトを見ていくね。
は〜い。
まずコンストラクタからね。
最初にスーパークラスのコンストラクタを呼び出してて、それから表画面用と裏画面用のレイヤを作ってるんだよね?
そ。Layer クラスのコンストラクタの引数って覚えてる?
え〜っとねぇ…第1引数が、そのレイヤが所属するウィンドウで、第2引数が親レイヤ…だったかな?
ん、そう。§3.2 で説明したよね。
えっと、確か kag オブジェクトってウィンドウだから、第1引数に指定できるんだよね?
うん。だから、KAG プラグインでレイヤを使うときは、別のウィンドウを作ったりしない限り、 第1引数は kag になるよ。
あと、第2引数の kag.fore.base は、表画面の背景レイヤなんだよね?
表画面の背景レイヤが親レイヤになるから、表画面に表示されるってワケだね。
なるほどね。
だから、裏画面用のレイヤは第2引数が kag.back.base になるんだね。
そういうこと。
あとは、表画面用のレイヤと裏画面用のレイヤのサイズと位置をそろえて、 表画面用のレイヤは赤色、裏画面用のレイヤは青色に塗りつぶしてるんだけど、この辺はわかるよね?
うん。setSizesetPosfillRect も使ったことあるからわかるよ。
じゃ、次はデストラクタね。
これって、レイヤを無効化してるんだよね?
そうだよ。
foreLaybackLay っていう2つのレイヤは、 このプラグインでしか使わないレイヤだから、プラグインが要らなくなれば、このレイヤも必要なくなるよね。
うん、そうだね。
だから、プラグインが要らなくなる時、つまりプラグインオブジェクトが無効化される時に呼び出されるデストラクタで、レイヤも無効化してるんだ。
そっか、なるほどね。
じゃあ最後は、プラグインの登録について。
KAG プラグインを使えるようにするためには、addPlugin メソッドを呼び出す必要があるんだ。
それって §3.2 とかで使った add メソッドみたいなの?
ん、確かに add メソッドに似てるんだけど、 addPlugin メソッドは KAG プラグイン専用のメソッドなんだ。
KAG プラグイン専用のメソッド?
addPlugin メソッドでプラグインオブジェクトを登録すると、 ウィンドウが無効化される時にプラグインオブジェクトを無効化してくれるだけじゃなくて、 KAGPlugin クラスのイベントハンドラを呼び出してくれるんだ。
KAGPlugin クラスのイベントハンドラって、あの7つのメソッドのことだよね?
そうそう。例えば、栞が保存される時には onStore メソッドが呼び出される、とかね。
KAGPlugin クラスのイベントハンドラは、プラグインオブジェクトを作っただけじゃ呼び出されなくて、 addPlugin メソッドで登録することで呼び出されるようになるんだ。
へぇ、そうなんだ。
というワケで、プラグインオブジェクトを作ったら、addPlugin メソッドで登録するのを忘れないようにね。
あと、addPlugin メソッドには引数が1つだけあるから、そこにプラグインオブジェクトを指定してね。
うん、わかった。
じゃあ、今回はここまで。
また次回ね。


前へ | TOP | 次へ