メニューの作り方

メニューの作り方


大半のものをスクリプトで作成する性質上、
いきなりZGEを触った人の中には、
メニューの作成方法が判らない人もいるのではないでしょうか。

そこで、テキスト描画を使わず、
キャラクターで作るメニューの作り方を紹介していきたいと思います。

まずはメニューを作る為に最低限何が必要か考えてみましょう。
・項目
・項目を選択するためのカーソル
・カーソルの移動
・項目の決定

おおよそ以上の事が考えられると思います。

それでは、サンプルを作成する前に
下の画像を保存して使える状態にしておいてください。



項目の作成

まず、項目となるキャラクターイベントを作成しましょう。

本来はテキストを画像にして用意しますが、
今回は簡単に Number+Strings 描画のキャラクターイベントを使う事にします。
キャラクター領域内に項目用のキャラクターイベントを作成しましょう。

画像は先ほど保存したものを指定します。

ここでは名前を“ITEM-−−%d”としますが、
“%d”以外の部分は任意のもので構いません。

この講座では項目用のキャラクターイベントを4つほど用意しました。


上記の項目用キャラクターイベントを配置します。

ここでは16ドット間隔で空けていますが、
一定間隔になるようにしましょう。

項目ができたら次はカーソルを作ります。


カーソルの作成

カーソルを移動するにはどうしたらいいでしょうか?

方向キーが入力されたら配置されている値だけ座標を加算・減算させれば、
とりあえず項目毎に動かすことができそうです。

まずはカーソルとなるキャラクターイベントを用意しましょう。
画像は先ほど保存した画像の一番下に用意してあります。


準備ができたら関数と変数を考えましょう。
ジョイスティックも含めた方向入力には、
・sKArJ_*
・sTr_*
・sCt_*
おおまかに以上のものが挙げられると思います。

変数の詳細は自分の目で確認してみましょう。
ここでは『押された瞬間』だけを判断してくれる変数『sTr_*』を使っていく事にします。

それと、変数を指定するために関数が必要ですが、
この手の条件による分岐で便利な関数が then です。
0が1かで指定した行にジャンプしてくれるので重宝します。

この2つの組み合わせでカーソルの移動を再現してみましょう。

0 then sTr_U 1 2  
1 add(+) cYnpos  -16 

0行目では sTr_U の値が1になった瞬間だけ1行目に、
それ以外なら2行目にジャンプするような形になります。

0行目で1と判断されたら1行目で Y座標に -16 を加算させ、
カーソルを16ドット動かすという感じです。
(※とくにaddを使っている意味はなく dec(-) cYnpos  16 でも問題ありません)

ちゃんと入力できた所で、
カーソルのキャラクターイベントをWキャラ配置”で項目部分に移動してから実行してみましょう。

※配置例

実行すると以下のような画面になったかと思います。

上方向に入力するとカーソルが16ドットずつ上に移動するようになったでしょうか。

このままだと上にしか移動できないので、
先ほどの要領で下にも移動できるようにしてみましょう。

0 then sTr_U 1 2  
1 add(+) cYnpos  -16 


3 then sTr_D 4 5  
4 add(+) cYnpos  16 


これでとりあえず上下には動くようになりました。
ですが、このままだと項目外にもカーソルが移動してしまうので、
項目がある部分だけ移動できるようにしていきます。

0 then sTr_U 1 4  
1 if(<=)less_eq i1  0 4
2 dec(-) i1  1 

3 add(+) cYnpos  -16 

5 then sTr_D 6 9  

6 if(>=)more_eq i1  3 9
7 add(+) i1  1
 
8 add(+) cYnpos  16 

上に移動すると変数を i1 を1減算、
下に移動すると変数 i1 を1加算するようにします。

これは今現在カーソルが何番の項目を選択しているかの判断にもなるので重要です。

そして、その項目以上もしくは以下にカーソルを移動させたくないので、
0なら上を押した時に変数の減算や座標の移動の部分を飛ばす為、 関数 if を使って判断してジャンプさせます。

下を押した場合も同様に、
3なら変数や座標を変更しないように関数 if でジャンプさせます。
(変数は0から数えているので4項目の場合は3となります)

これでカーソルが項目外に移動しなくなりました。
次は各項目の値を左右キーで変更できるようにしましょう。


項目の動作

カーソルが完成したので最後の仕上げとして項目の数値を左右キーで変更できるようにします。

項目の数値を変更する方法はいろいろ考えられると思いますが、
今回は項目自体で判断させる方法を使います。

0 skip_slp 1 0    
1 get i1 41 i1 
2 if(!=)not_eq i1  * 7
3 then sTr_R 4 5  
4 add_lim l0  1 9
5 then sTr_L 6 7  
6 dec_lim l0  1 0
2行目の * の部分は、
各項目の値となるカーソルの変数 i の値になります。

項目1を選んでいるなら0、
項目2を選んでいるなら1となるので、
それぞれ項目の値を指定しましょう。

そうする事で項目を選択していると判断した時のみ、
3行目以降の方向入力を実行するようにしています。

左右キーで値を変更する3行目の部分を変数 sTrB1Sh に変更すれば、
ボタンを押した時にシーン移動するような事も可能です。

ちなみに、オプションなどの設定の場合、
決定した時にこの変数を1か所のイベントに集める等すれば、
引き継ぎや保存が楽になります。


項目の同期

現状でも十分に選択可能な項目としての機能は果たしますが、
新しく項目を追加したい場合や場所を少し動かしたい場合、
1つ1つのイベントを配置し直す必要があって少し面倒です。
そこで、イベントを同期させる方法を紹介します。

項目2以降のキャラクターイベント編集画面を開いて、
親イベントIDを指定しましょう。

赤枠の部分の▲を1度おして値を『-1』にし、
1つ前のイベントを親イベントに指定します。

ついでに初期状態設定にある座標は0に指定しておいてください。

この作業を項目2以降のすべての項目に行った後、
項目2以降の項目イベントが実行するスクリプトに、
以下のようにスクリプトを挿入します。

0 sync_status        
1 sync_move      
2 add(+) cYnpos  16 

3 skip_slp 4 0    
4 get i1 41 i1 
5 if(!=)not_eq i1  * 10
6 then sTr_R 7 8  
7 add_lim l0  1 9
8 then sTr_L 9 10  
9 dec_lim l0  1 0


3つの項目に記入していくのは少し大変ですが、
1〜3行目をコピーし、
スクリプトデータ画面で『行挿入』を3回押した後、
ボタンを押して挿入すると楽です。

それぞれの関数に関してはスクリプトデータ画面で説明が表示されます。
難しい内容ではないのできちんと説明を読んで把握しておくと今後のスクリプト作成に役立つと思います。

文章だけでは把握しきれない人もいるかと思うので、
ZGE用サンプル』内にメニューのサンプルを用意しました。
最初は自力で作る方が良いと思いますが、
どうしても判らない人はご利用ください。


▲フレームが表示されない人はクリック