ExtSystemButton(Extended SystemButton) Plugin. 1. はじめに ExtSystemButtonプラグインは、画面上にシステムボタン(メッセージ ウインドウにくっついた定常的に表示されるボタン)を表示するKAG マクロを提供する。吉里吉里に付属のsystembutton.ksは、使用する ためにTJSの知識が必要だったり、KAGだけから使うことができな かったりと使いづらい。それを解決するために作成した。 2. 使用例 KLayers.ks、TJSFunctions.ks、ExtSystemButton.ks を data/scenario ディレクトリあたりに放り込む。 で、最初に一回だけ、KAGスクリプト(例えばfirst.ks)の頭で以下を実行。 [call storage="ExtSystemButton.ks"] そうすると、[sysbutton] タグ他が使用可能になる。 実際に画面に画像を表示するときはこんな形で指定する。 ; システムボタンを表示 [sysbutton graphic="confbtn" top=470 left=450 exp="kag.callExtraConductor('rclick.ks','*rclick_conf')"] [sysbutton graphic="loadbtn" top=486 left=450 exp="kag.callExtraConductor('rclick.ks','*rclick_load')"] [sysbutton graphic="savebtn" top=402 left=450 exp="kag.callExtraConductor('rclick.ks','*rclick_save')"] [sysbutton graphic="skipbtn" top=418 left=450 exp="SysBtn_onSkipButtonClick()"] [sysbutton graphic="autobtn" top=434 left=450 exp="SysBtn_onAutoReadButtonClick()"] [sysbutton graphic="hidebtn" top=450 left=450 exp="SysBtn_onTextHideButtonClick()"] [sysbutton graphic="histbtn" top=466 left=450 exp="SysBtn_onHistoryButtonClick()"] ; システムボタンを消去 [sysbutton_erase] 3. KAGタグリファレンス [sysbutton name= top= left= page= visible= graphic= storage= target= exp= showfocusimage=] 説明: システムボタンを一つ作成する 引数: [sysbutton_setopt]の全てのパラメータが指定可能。後から [sysbutton_setopt]で指定してもよいが、まぁ最初に一回で 指定するでしょう普通。 使用例: ; ボタンを(450,434)に作成し、0.3秒でフェードインする [backlay] [sysbutton graphic="autobtn" page=back top=434 left=450 exp="SysBtn_onAutoReadButtonClick()"] [trans method=crossfade time=300] [wt canskip=true] [sysbutton_setopt name= top= left= page= visible= graphic= storage= target= exp= showfocusimage=] 説明: システムボタンのオプションを設定する 引数: 引数は全て[sysbutton]と同じ。 オプションは、ButtonLayerの全てのプロパティに加え、[button] タグに近いいくつかが指定できる。プロパティを全て列挙するのは 困難なので、以下には代表的なものを記す。 name= ボタン名称。後に個別に[sysbutton_setopt]などを使う 場合のIDとなる。指定しない場合はそのほかのボタンと 同一と扱われ、そのボタンだけを指定することはできない。 graphic=[button]と同じ形式のボタン画像ファイルを指定する。 拡張子を指定する必要はない。透明色を含んだ.png画像で あることが望ましい。 page=fore(def)|back|both ボタンのページ。backに置いて[trans]することで フェードが可能。both は fore と back 両方の意味。 visible=true(def)|false ボタンの表示・非表示指定。 storage=クリック時にjumpする時のjump先ファイル名を指定する。 指定されなかった場合は何もしない。 target= クリック時にjumpする時のjump先ファイル名を指定する。 指定しなければ storage の先頭を示す。 top= ボタンを表示する左上Y座標を指定する。(default=0) left= ボタンを表示する左上X座標を指定する。(default=0) exp= ボタンをクリックした時に実行するTJS式を指定する。 指定されなかった場合は何もしない。 absolute= ボタンの表示優先順位。デフォルトでは1100000 (メッセージレイヤ100枚目と同じ)。 onclick=ボタンをクリックした時に実行するTJS式を指定する。exp=と同じ。 clickse=ボタンをクリックした時に鳴らすSEを指定する。 clicksebuf=0 clickseの演奏バッファを指定する。 clickstorage= clicktarget= ボタンをクリックした時にjumpする先を指定する onrelease= ボタンを離した時に実行するTJS式を指定する。 releasese= ボタンを離した時に鳴らすSEを指定する。 releasesebuf=0 releaseseの演奏バッファを指定する。 releasestorage= releasetarget= ボタンを離した時にjumpする先を指定する。 onenter=カーソルがボタンに入った時に実行するTJS式を指定する。 enterse=カーソルがボタンに入った時に鳴らすSEを指定する。 entersebuf=0 enterseの演奏バッファを指定する。 enterstorage= entertarget= カーソルがボタンに入った時にjumpする先を指定する。 onleave= カーソルがボタンから出た時に実行するTJS式を指定する。 leavese= カーソルがボタンから出た時に鳴らすSEを指定する。 leavesebuf= leaveseの演奏バッファを指定する。 leavestorage= leavetarget= カーソルがボタンから出た時にjumpする先を指定する。 ; 以下の機能は削除されて、現在は使用できない ; showfocusimage=true|false(def) ; フォーカス画像を表示するかどうか。showfocusimage=true ; の場合、ボタン画像は ;   [通常]→[クリック]→[ポイント]→[フォーカス] ; の4画像横連結である必要がある。また、この時ボタンは ; [TAB]キーで切り替えられるようになる。 [sysbutton_erase name= page=] 説明: システムボタンを消去する。 引数: name= 対象とするボタン名称を指定する。指定しなかった場合は、 全てのシステムボタンが対象となる。 page=fore(def)|back|both 対象とするページを指定する。 使用例: ; 作成済みのpage=foreの全てのボタンを削除する [sysbutton_erase] ; 作成済みの全てのボタンを0.5秒でフェードアウト後削除する [backlay] [sysbutton_erase page=back] [trans method=crossfade time=500] [wt canskip=true] ; ボタン"abc"だけを、0.5秒でフェードアウト後削除する [backlay] [sysbutton_erase name="abc" page=back] [trans method=crossfade time=500] [wt canskip=true] 3. クリック時に実行する関数例 exp= や storage=、target= の飛び先は、適当に自前で用意すれば よいが、いくつかは例として実装してあるので、そちらを使っても よい。SKIP/自動読進/履歴/テキスト消去についてはそのまま使える はず。上の「使用例」を参照すること。 // SKIPボタンが押された function SysBtn_onSkipButtonClick(); // 自動読進ボタンが押された function SysBtn_onAutoReadButtonClick(); // 履歴ボタンが押された function SysBtn_onHistoryButtonClick(); // テキスト消去ボタンが押された function SysBtn_onTextHideButtonClick(); // ここから下は、rclick_tjs20a.ks が必要。普通そんなの使わない // だろうから、ユーザは自前で用意すべき。 // セーブ ボタンが押された function SysBtn_onSaveButtonClick(); // ロード ボタンが押された function SysBtn_onLoadButtonClick(); // メニュー ボタンが押された function SysBtn_onMenuButtonClick(); 4. その他 デフォルトでは、システムボタンは、メッセージ画面の一時消去 (「メッセージを消す」)に同期して消えるようになっている。 そうではなく、常に画面上に表示したい時は、プラグイン中ほどの global.extsystembuttonplugin_obj = new KLayersPluginOnMessage('extsystembutton'); を global.extsystembuttonplugin_obj = new KLayersPluginOnMessage('extsystembutton',,,false); に変更すればよい。 5. 注意点 ExtSystemButton は、通常の[button]などとは異なり、[cm][ct][er] などでは消去されない。アタリマエと思うかもしれないが、注意しないと、 画面再描画の時に「前のsystembuttonを削除しないで新しいsystembuttonを 上書き描画」してしまうことになる。これによる不具合は見かけ上 無いのだが、立派なメモリリークであり、しばらくゲームを実行していると メモリ使用量がじわじわ増えていくということが発生しうる。 使わなくなった ExtSystemButton は、こまめに [sysbutton_erase]で 削除することを忘れずに! Ver 0.9から、ボタンIDの指定が key= から name= に変更になった。注意。 右クリックルーチンを呼ぶときは、kag.callExtraConductor()を使って呼び、 最後に[return]で終わること。そうしないと、同じ場所に戻ってこれない。 ExtSystemButtons.ks に SysBtn_onSaveButtonClick()などで実装例を 示しているので、そちらも見て欲しい。