Unityと吉里吉里でSLGとかRPGを作るブログ

前回のじゃんけんゲームを構成するスクリプトについて解説します。
まずは、TJSプラグインから解説して行きましょう。


■000_CustomLayer(カスタムレイヤ)


 文字通り、 Layerクラスを継承しカスタムしています。
 カスタム内容は、Layer上でマウスクリックをした場合、押されたボタン(左右)に合わせて、windowオブジェクトにマウスがクリックした事を知らせています。
 何をしているかと言うと、このレイヤ上でマウスをクリックしても、メッセージウィンドウのクリック待ちや、右クリックサブルーチンに対応させる為です。
 これを行わないと、作ったボタンの上で右クリックしてもサブルーチンが動かなかったり、メッセージウィンドウが更新されない事態になるのです。


■001_ImageLayPlugin(イメージレイヤ)

画像イメージを表示するためのプラグインで、今回は特に使いません。継承元と言うだけです。
このプラグインの中で、CustomLayerを表画面用と裏画面用に紐つけて所持しています。
今後詳しく紹介するので、今回は画像を表示するプラグインとだけ覚えて置いて下さい。


■002_ImageListLayPlugin(イメージリストレイヤ)

ImageLayPluginを継承し、カスタムしています。
画像の1部分だけを表示し、且つ指定した位置の画像を表示する事が出来ます。
イマイチ良く分からないかも知れませんが、例によって今回は余り使いませんので、ロードした画像の一部を任意に表示出来るとだけ覚えて置いて下さい。


■003_WinButtonLayerPlugin(ウィンドウボタンレイヤ)

ImageListLayPluginを継承し、カスタムしています。
じゃんけんボタンの表示に使用しているプラグインで、ロードした画像をImageListLayPluginの機能を使ってボタンの状態に合わせて表示画像を切り替えています。
下がロードした画像です。
button_gu_image.png
4種類の画像が連結しているのが分かりますね。
右から、ボタン平常時ボタンをクリックした時ボタンの上にマウスが乗った状態ボタンが使用不能になった状態の4種類となっています。
loadImagesを使ってロードした画像に従い、自動的に大きさを調整し、マウスアクションに合わせた画像を表示してくれます。
簡単に言うと、画像をロードしたら、勝手にボタンの機能になると言う訳です。

更に、マウスアクションによって実行されるファンクションと、識別用のIDを指定する事が出来ます。
この機能で、ボタンを押した時に実行される処理や、どのボタンが押されたか判定する事が出来ます。


■004_JyankenPlugin(じゃんけんプラグイン)


じゃんけんウィンドウを生成するプラグインです。
具体的には、ぐー、ちょき、ぱーボタンと、それを押した時の機能が書かれています。

まず、コンストラクタで各ボタンオブジェクトを生成します。
j_button[0] = new WinButtonLayerPlugin(click_func, onmouse_func, offmouse_func, button_id);

ぐーボタンだとこの部分ですね。
j_button配列の0番目をぐーボタンにしています。
次に生成時に渡している変数についてですが、click_func, onmouse_func, offmouse_funcの3つについては、少し上で宣言している変数が設定されています。

//ボタンが押された時に実行されるファンクションを設定
var click_func = onClickBtn;     //ボタンがクリックされた時
var onmouse_func = onMouseBtn;  //ボタンにマウスが乗った時
var offmouse_func = offMouseBtn; //ボタンからマウスが離れた時

この部分ですね。
赤字になっている場所を見て頂くと、下の方にあるファンクションと同名である事がわかります。

function onClickBtn(i_x, i_y, i_button, i_id)
function onMouseBtn(i_id)
function offMouseBtn(i_id)
このファンクションがスクリプトの下の方にあるのが分かるはずです。
ここで指定したファンクションが、マウスのアクションに応じて実行されます。

次にbutton_idです。ここには、"GU"などの文字列が設定されています。
ボタンを押した時に、どのボタンが押されたか判定する為のIDです。
ボタン毎に違うファンクションを設定すれば、このIDは必要ないのですが、スクリプトが大きくなってしまう事や、ほぼ同じ処理を行うボタン等の無駄を省く効果があります。

続いて、画像のロードです。
//画像をロード
j_button[0].loadImages("button_gu_image");
これは、先ほど「003_WinButtonLayerPlugin」で説明した画像をロードしています。
ロードした後、ボタンサイズの横幅は画像サイズの4分の1になります。

次は表示場所の設定を行います。
//ポジションの設定
var left = 160;
var top = 190;
j_button[0].setPos("all", left, top);

"all"が入っている場所は、表(fore)、裏(back)、両方(all)を指定出来ます。
今回は、表裏どちらも同じ位置にしました。

次に描画の優先順位を設定します。
j_button[0].setAbsolute(win_abs);
同じ位置にあった場合、この数値の高い方が上に表示されます。
今回は、そんなものか程度に覚えておいて下さい。

//全てのボタンを非表示に設定
setVisible("all", false);

このコマンドで、全てのじゃんけんボタンを非表示にしています。
"all"が入っている所がpageです。これは先ほどご紹介した内容と一緒です。
次が、表示するか非表示にするか。falseなら非表示、trueなら表示になります。

openWin(i_page)
このファンクションは、外部から呼び出し用に作ってます。
じゃんけんボタンを表か裏か両方かに表示できます。

続いて今回の肝である、じゃんけんボタンに指定したファンクションを解説します。
//------------------------------------
// ボタンが押された時の処理
//------------------------------------
onClickBtn(i_x, i_y, i_button, i_id)

このファンクションは、コメントの通り、じゃんけんボタンが押された時に実行されます。
i_x、i_yはそれぞれクリックされた時のマウスの位置です。
i_buttonは押されたボタンそのものです。押されたボタンを使用不能にしたり、ボタンの位置を取得したりするのに使えます。
i_idは上で指定した識別用IDが返されます。これにより、どのじゃんけんボタンが押されたか判別出来るのです。

//特定のラベルに飛びます(この場合、勝った時のラベル)
var storage = "jyanken.ks";
var target = "*kati";
var countpage;

kag.process(storage, target, countpage);
return;

KAGのジャンプタグに相当する機能です。jyanken.ksの*katiラベルに飛ぶという訳です。

KAGへの追加を行います。
004_JyankenPlugin(じゃんけんプラグイン)の一番最後にある。
kag.addPlugin(global.jyanken_win = new JyankenPlugin());

この記述がKAGへの追加となります。
このスクリプトを、jyanken_winという名前でKAGに登録しているのです。

■KAGスクリプトファイル
さて、残りのファイルについても解説します。
first.ksは、ご存知吉里吉里で最初に稼働するスクリプトです。
この中で、各種プラグインをロードしています。

jyanken.ksは、ぐー、ちょき、ぱーのじゃんけんボタンが押された時に、それぞれの飛び先が明記されています。

上での説明で、004_JyankenPlugin(じゃんけんプラグイン)をjyanken_winという名前で登録している話をしました。
今回は、その呼び出しです。

;じゃんけんボタンをまた表示します。
[eval exp="jyanken_win.openWin('fore')"]
この様に、[eval]タグで実行し、 expの引数に名前とファンクションを設定すればOKです。

■総括
正直、読んでるとしんどいかと思いますが、アップしているファイルをダウンロードして頂き、実際に眺めてみれば、それほど難しい事はしていないのが解るはずです。
これからも、こんな感じで、最小単位で動く形をアップして行こうと思います。
これらのスクリプトは、そのまま使用するもよし、改変するも良し、自由に使ってください。

次回からは、フラッシュゲームでお馴染みの脱出ゲームもどきを作ってみようと思います。




◆つぶつぶ主人公HP◆
スポンサーサイト
2012.04.13 / Top↑
Secret

TrackBackURL
→http://nekodamasi.blog79.fc2.com/tb.php/52-cdf3c7a7