Section 4.2 kag オブジェクトとレイヤ

今回作るプラグインはレイヤを使うから、最初に KAG プラグインでのレイヤの扱い方について見ていくね。
レイヤって第3章でも何回か作ったよね。
ん、レイヤの作り方とかメソッドの使い方は、基本的に第3章でやったのと同じ。
けど、KAG には表画面と裏画面があるから、プラグインでレイヤを使う時にはその辺をちゃんと考えて作らないとね。
あ、そっか。今までは表とか裏とか考えてなかったもんね。
でも、それって具体的にはどうやったらいいの?
じゃあ、まずは KAG のレイヤ構造についてちょっと見とこっか。
は〜い。
KAG で使われてるレイヤって色々あるよね?
うん。背景レイヤとか前景レイヤとかメッセージレイヤとかがあるよね。
そういうレイヤは全部 kag っていう名前のオブジェクトが管理してるんだ。
え、そうなの?
うん。
ちなみに kag オブジェクトは KAGWindow っていうクラスのオブジェクトで、 Window クラスを継承して作られてるんだ。
ってことは、その kag オブジェクトってウィンドウなの?
レイヤを使うためにはウィンドウが必要だからね。
あ、そういえば §3.2 でレイヤはウィンドウに所属してなくちゃいけないって言ってたよね。
そ。でも kag オブジェクトはレイヤを管理してるだけじゃなくて、 その名前の通り KAG に関する機能を全部管理してるんだ。
へぇ、そうなんだ。
というワケで、KAG で使われてるレイヤには、kag オブジェクトを通じてアクセスできるんだ。
ただ、kag オブジェクトは KAG のシステム全体を制御してる重要なオブジェクトだから、扱いには注意が必要だけどね。
でも、KAG プラグインを作る時には kag オブジェクトを使わなくちゃいけなくなることもあるんでしょ?
それって大丈夫なの?
ちゃんと気をつけてプラグインを作れば大丈夫だよ。
それに普通のプラグインを作ってる限りは、システムがおかしくなっちゃうかもしれないようなスクリプトを書くことはないと思うし。
そっか、わかった。
じゃ、レイヤの話に戻るね。
背景レイヤ・前景レイヤ・メッセージレイヤには、kag オブジェクトのメンバ変数を通じてアクセスできるんだ。

kag オブジェクトのレイヤ>
レイヤの種類表画面のレイヤ裏画面のレイヤ
背景レイヤkag.fore.basekag.back.base
前景レイヤ(i は前景レイヤ番号 0〜)kag.fore.layers[i]kag.back.layers[i]
メッセージレイヤ(i はメッセージレイヤ番号 0〜)kag.fore.messages[i]kag.back.messages[i]

表画面の情報は fore っていう辞書配列に入ってて、 裏画面の情報は back っていう辞書配列に入ってるんだ。
で、例えば背景レイヤは base っていう名前だから…
kag.fore.base で表画面の背景レイヤが参照できるんだね。
ん、そういうこと。
だから、例えばこうすれば表画面の背景レイヤのサイズが取得できるんだ。

<表画面の背景レイヤのサイズを表示するスクリプト>

[iscript]
System.inform("表画面の背景レイヤのサイズは " + kag.fore.base.width + "×" + kag.fore.base.height + " ピクセルです。");
[endscript]

このスクリプトを first.ks に書き込んで実行してみて。
は〜い。

<実行結果>

表示されたメッセージ

ほんとだ。表画面の背景レイヤの幅と高さが表示されたね。
どうやって表画面の背景レイヤの幅と高さを取得してるかは解るよね?
え〜っと、kag.fore.base.widthkag.fore.base.height が、それぞれ表画面の背景レイヤの幅と高さだよね?
ん、そうそう。
背景レイヤは BaseLayer っていうクラスのオブジェクトなんだけど、 Layer クラスを継承して作られてるから、width プロパティと height プロパティを持ってるんだ。
あ、そうなんだ。
あと、前景レイヤとメッセージレイヤは複数作れるから、配列になってるんだ。
例えば…

<裏画面の 0 番のメッセージレイヤ(message0)のサイズを表示するスクリプト>

[iscript]
System.inform("裏画面の 0 番のメッセージレイヤのサイズは " + kag.back.messages[0].width + "×" + kag.back.messages[0].height + " ピクセルです。");
[endscript]

こうすれば、裏画面の 0 番のメッセージレイヤのサイズが取得できるよ。
これも first.ks に書き込んで実行すればいいんだよね?
うん。

<実行結果>

表示されたメッセージ

確かに Config.tjs で設定してるサイズと同じになってるね。
ちなみに裏画面の 0 番の前景レイヤのサイズを取得するときは kag.back.layers[0].widthkag.back.layers[0].height ね。
じゃあ、1 番の前景レイヤのサイズは kag.back.layers[1].widthkag.back.layers[1].height でいいの?
ん、そう。配列の添え字と image タグとかの layer 属性に指定する値が対応してるから。
なるほどね。
じゃあ、次回はこれを踏まえて、実際にプラグインの中でレイヤを作ってみるね。
りょーかい!
それじゃ、また次回ね!


前へ | TOP | 次へ