説明つき折りたたみメニューの書き方【伺か・里々忘備録】

説明つき折りたたみメニューの書き方里々の記述

ゴーストのつつきメニューなどを折りたたみ式にするための記述の紹介です。

折りたたみ式というのは、「機能」「設定」などの項目をクリックすると、中身(細かい選択肢)が展開される、といったタイプのものです。
幻日幻月環さんの「折りたたみ式メニュー」を見かけて、おっいいな~!やりたいな~!っと思って作りました。

なおここで紹介しているものは、里々のしおりを使ってゴーストを制作している環境向けの記述です。
里々以外の栞を使っている場合はご注意。

仕様書

この記述を使うと、こんなことができるようになります。

  • メニューを折りたたみ式(展開式)にできる
  • 各メニュー項目に説明を表示させることができる

メニュー項目を展開式にできる

折りたたみ式のメニューというのは、このように「大見出し」をクリックすると、その中の細かいメニュー項目が表示される、といった動きをするメニュー画面のことです。

クリックすると展開するゴーストつつきメニューの書き方

簡単にいうと、メニュー項目のカテゴリー分けのような感じです。

このようにすることで、いちいち「前のページに戻る」などのボタンを用意しなくても、そのページだけでたくさんの選択肢を表示させることができるというわけです。
なので、メニュー項目がたくさんあるタイプのゴーストさんと相性がいい、はず。

記述をいじれば、メニュー画面を開いた時点で、「複数のカテゴリ内のメニュー項目」がすでに展開された状態で表示させるようにもできます。

メニュー項目に説明を添える

また、メニューの各項目に、説明のテキストを表示させることもできます。

実際のバルーンで見ると、こんな感じ。

クリックすると展開するゴーストつつきメニュー説明ヘルプの表示

このメニュー項目の説明文は、右下にある「?」ボタンを押すことで「表示・非表示」の切り替えを行うことが可能です。

説明文のテキストは、好きに文字色や文字の大きさを変えることもできるので、お好きにカスタマイズしてください。

なおこの説明テキストは、「?」ボタンを押さないと表示されることはないので、普段は邪魔にもならないハズ、です。
メニュー項目の説明不足感をどうにかしたい!と思っている方はぜひぜひ。

なお、「説明の表示・非表示」ボタンの記述部分を消してしまえば、説明文が表示されることはありません。
なので、説明文はいらないよ!という方はそのボタンを消すだけでOKです。
記述の詳しい位置は後述します。

説明つき折りたたみメニューの書き方

さて、ここからは説明つき折りたたみメニューの記述の紹介です。
解説とか、使い方も添えておきます。

まずは、以下の記述をお好きなdic内にぺたりと貼り付けてください。

*OnChoiceSelectEx
$EX内のR2=(R2)

*0headつつかれ
>メニュー呼び出し

*メニュー呼び出し
$EX内のR2=メニューのメイン
$メニュー項目の説明表示=オフ
>メニュートップ画面

*メニュートップ画面
$メニューに表示させる項目=(EX内のR2)
:えらんでね

\![*]\q[メニュー,メニュートップ画面,メニューのメイン]\_l[@1em,]\![set,balloonwait,0]\_n\f[height,12]────────────────────────\f[height,default]\_n\![set,balloonwait,1](when,(メニューに表示させる項目)==メニューのメイン,(call,メニューのメインの項目),)
\![*]\q[機能,メニュートップ画面,メニューの機能]\_l[@1em,]\![set,balloonwait,0]\_n\f[height,12]────────────────────────\f[height,default]\_n\![set,balloonwait,1](when,(メニューに表示させる項目)==メニューの機能,(call,メニューの機能の項目),)
\![*]\q[設定,メニュートップ画面,メニューの設定]\_l[@1em,]\![set,balloonwait,0]\_n\f[height,12]────────────────────────\f[height,default]\_n\![set,balloonwait,1](when,(メニューに表示させる項目)==メニューの設定,(call,メニューの設定の項目),)
\f[align,right]\![*]\q[なんでもない,なんでもない]
\n[half]φ
\f[align,right]\__q[メニュー項目の説明切り替えの処理]?\__q

*メニュー項目の説明切り替えの処理
(when,(メニュー項目の説明表示)==オフ,(set,メニュー項目の説明表示,オン),(set,メニュー項目の説明表示,オフ))
$EX内のR2=メニューのメイン
>メニュートップ画面

#----------------------------------------------

@メニューヘルプの文字装飾
\n\f[color,117,110,86]

*メニューのメインの項目
:
\n[half]φ
\![*]\q[話をしよう,会話する](when、(メニュー項目の説明表示)==オン、(メニューヘルプの文字装飾)文字入力ボックスを表示\f[default])
\![*]\q[日記帳を開く,日記帳](when、(メニュー項目の説明表示)==オン、(メニューヘルプの文字装飾)彼らが好きにあれやこれやを書くためのノートだ\f[default])

*メニューの機能の項目
:
\n[half]φ
\![*]\q[出かける時間お知らせ,出かける時間お知らせ機能](when、(メニュー項目の説明表示)==オン、(メニューヘルプの文字装飾)何時何分に家をでると伝えておくとお知らせしてくれる\f[default])
\![*]\q[待ち時間タイマー,待ち時間お知らせタイマ](when、(メニュー項目の説明表示)==オン、(メニューヘルプの文字装飾)洗濯ものやお菓子焼き上げなど待ち時間をお知らせしてくれる\f[default])
\![*]\q[リマインド,リマインドしてもらう](when、(メニュー項目の説明表示)==オン、(メニューヘルプの文字装飾)忘れたくないことを繰り返しお知らせしてくれます\f[default])
\n[half]φ
\![*]\q[ごみの日の設定,ゴミ収集曜日のお知らせ](when、(メニュー項目の説明表示)==オン、(メニューヘルプの文字装飾)ゴミの日を忘れないためのお知らせリマインド機能\f[default])


*メニューの設定の項目
:
\n[half]φ
\![*]\q[しゃべり頻度の変更,しゃべり頻度の設定](when、(メニュー項目の説明表示)==オン、(メニューヘルプの文字装飾)何分おきにしゃべるか勝手にしゃべらないかの設定\f[default])
\![*]\q[トーク内容の設定,トーク内容の設定](when、(メニュー項目の説明表示)==オン、(メニューヘルプの文字装飾)しゃべる内容に関してカスタマイズできます\f[default])
\n[half]φ
\![*]\q[自分のことはこう呼んで,自分の名前の登録](when、(メニュー項目の説明表示)==オン、(メニューヘルプの文字装飾)呼ばれたいあなたのお名前の設定\f[default])
\![*]\q[誕生日を伝える,誕生日を伝える](when、(メニュー項目の説明表示)==オン、(メニューヘルプの文字装飾)あなたの誕生日を教える\f[default])
\n[half]φ
\![*]\q[もう一度君の事を教えて,もう一度自己紹介のセリフ](when、(メニュー項目の説明表示)==オン、(メニューヘルプの文字装飾)(メイン名前)の自己紹介もとい機能解説です。つつきメニューや着替えのことなど教えてくれます。\f[default])

これで「>メニュー呼び出し」でどこからか呼び出してもらえたら、どんな感じで動くのか見ることができます。

この記述では、以下の部分で「メイン側の当たり判定”head”をつつかれた時にこのメニューを表示する」と設定してあります。

*0headつつかれ
>メニュー呼び出し

なので、別の場所から呼び出したい時は「0headつつかれ」をいじるか、ジャンプ先の名前「メニュー呼び出し」を呼び出したい場所へ記述するなどしてカスタマイズしてください。

必要な記述は、これだけです。

記述の使い方

ここからはこの記述の使い方を説明していきます。

使い方ってなんぞやというと、こんな感じのことです。

  • メニューが表示される前の前提の処理
  • メニューの項目を増やしたり減らしたりしたい時にいじる場所
  • 説明文のテキストのカスタマイズ方法

この記述を使う時や、記述を自分好みにいじる時なんかにもぜひ参考にしてみてください。

メニューが表示される前の前提処理

まずはメニューが表示される前の前提処理の部分について。

以下の部分で「メニューを表示させる時の初期設定」を行っています。

*メニュー呼び出し
$EX内のR2=メニューのメイン
$メニュー項目の説明表示=オフ
>メニュートップ画面

上記の前提処理を経由してからメニューを表示させないと、メニューの表示がおかしなことになります。
なので、メニューを表示させるときは直接「*メニューのトップ画面」には飛ばずに、必ず「*メニュー呼び出し」を経由させるようにしてくださいね。

前提処理の解説

なおこの前提処理ですが、前提処理といっても、2つの変数に値を入れているだけです。
この2つの変数の役割を簡単に説明すると、こんな感じです。

  • 「$EX内のR2」……メニュー画面を開いたときに表示させておきたいメニュー項目を指定している
  • 「$メニュー項目の説明表示」……メニュー項目に表示される説明テキストを非表示にしておく

まず「$EX内のR2=メニューのメイン」で、メニュー画面を開いたときにあらかじめ展開、つまり表示させておきたいメニュー項目を指定しています。

なので、例えばこの部分を「$EX内のR2=メニューの機能」このように書けば、メニュー画面を開いた直後には「機能」のカテゴリに属しているメニュー項目が表示されている、ということになります。

そして「$メニュー項目の説明表示=オフ」では、メニュー画面を開いた時、いつだって説明のテキストが表示されない状態であるようにするための記述です。

このように書いておくことで、前回メニュー画面に説明テキストを表示させたままメニューを閉じたとしても、次にメニュー画面を開く時には説明のテキストは表示されていません。

大見出しのメニュー項目を増やす

大見出しの項目を増やしたり減らしたりしたい場合は、以下の部分をいじってください。

\![*]\q[メニュー,メニュートップ画面,メニューのメイン]\_l[@1em,]\![set,balloonwait,0]\_n\f[height,12]────────────────────────\f[height,default]\_n\![set,balloonwait,1](when,(メニューに表示させる項目)==メニューのメイン,(call,メニューのメインの項目),)
\![*]\q[機能,メニュートップ画面,メニューの機能]\_l[@1em,]\![set,balloonwait,0]\_n\f[height,12]────────────────────────\f[height,default]\_n\![set,balloonwait,1](when,(メニューに表示させる項目)==メニューの機能,(call,メニューの機能の項目),)
\![*]\q[設定,メニュートップ画面,メニューの設定]\_l[@1em,]\![set,balloonwait,0]\_n\f[height,12]────────────────────────\f[height,default]\_n\![set,balloonwait,1](when,(メニューに表示させる項目)==メニューの設定,(call,メニューの設定の項目),)
\f[align,right]\![*]\q[なんでもない,なんでもない] \n[half]φ \f[align,right]\__q[メニュー項目の説明切り替えの処理]?\__q

まず、上記の箇所では「メニュー・機能・設定」などの、メニュー項目の大見出し・カテゴリとなる項目を定義しています。

なので、大見出しを新しく追加したい場合は、下記の「【】で囲ってある部分」をいじるだけでOKです。

\![*]\q[【表示させたい文字】,メニュートップ画面,【メニュー項目が書かれているジャンプ先の名前】]\_l[@1em,]\![set,balloonwait,0]\_n\f[height,12]────────────────────────\f[height,default]\_n\![set,balloonwait,1](when,(メニューに表示させる項目)==【メニュー項目が書かれているジャンプ先の名前】,(call,【メニュー項目が書かれているジャンプ先の名前】の項目),)

念のために書いておくと、いじる際はカッコ【】ごと消して好きな文字列を入力してくださいね。

それと、「メニュー項目が書かれているジャンプ先の名前」と書かれている部分は、全ておなじ文字列にしてください。
じゃないと、うまい感じに動かなくなってしまいます。

細かなメニュー項目を増やす

そして、細かなメニュー項目を増やしたい場合は以下の部分をいじってください。
以下が、大見出し(各カテゴリ内)の中に含まれる、細かいメニュー項目を定義している部分です。

*メニューのメインの項目

\n[half]φ
\![*]\q[話をしよう,会話する](when、(メニュー項目の説明表示)==オン、(メニューヘルプの文字装飾)文字入力ボックスを表示\f[default])
\![*]\q[日記帳を開く,日記帳](when、(メニュー項目の説明表示)==オン、(メニューヘルプの文字装飾)彼らが好きにあれやこれやを書くためのノートだ\f[default])

「コミュニケーションボックスを表示する」や「しゃべり頻度の変更」などなどの細かなメニュー項目は、このように「*メニューのメインの項目」以下に書いていきます。

なお「*メニューのメインの項目」の「メニューのメイン」の文字列は、先ほど説明した「【メニュー項目が書かれているジャンプ先の名前】」の文字列と同じにする必要があります
そうしないと、大見出しの項目をクリックしても、何も表示されなくなってしまいます。

説明を表示する部分

以下の部分が、「各メニュー項目の説明を表示する部分」です。

(when、(メニュー項目の説明表示)==オン、(メニューヘルプの文字装飾)文字入力ボックスを表示\f[default])

when分岐を使っています。
「説明の表示」の変数がオンになったとき、説明のテキストが、各メニュー項目の下に表示されます。
上記の例では、「文字入力ボックスを表示」というテキストが説明として表示される、といった感じです。

そして、以下のこの部分が「メニュー項目の説明の表示・非表示」を切り替えるためのボタンです。

\f[align,right]\__q[メニュー項目の説明切り替えの処理]?\__q

説明文を表示する必要はないよ!という場合には、上記の1行を消してもらえれば、説明文が表示されることはありません。

説明テキストの装飾をカスタマイズする

説明文のテキストの装飾に関しては、以下の部分で定義しています。

@メニューヘルプの文字装飾
\n\f[color,117,110,86]

これは、「項目に表示される説明文」の文字を装飾するためのものです。
なので、説明文の文字装飾をカスタマイズしたい場合は、ここをいじっていください。

上記では「\n」で改行をはさみ、「\f[color,117,110,86]」で文字の色を変えています。
これらは全て、文字を装飾するためのさくらスクリプトです。

文字装飾のさくらスクリプトは、他にも\f[height,-1]で文字の大きさを1pixelだけ小さくしてみたり、\f[shadowcolor,#ffff00]で文字の影の色を変更してみたりなどなど、いろいろあります。

文字装飾のさくらスクリプトはどんなものがあるのか確認したい方は、UKADOCさんの「さくらスクリプト・文字変更コマンド」のページを見てみてくださいませ。

そして、「各メニュー項目の説明を表示する部分」の文末に「\f[default]」とありますが、これは、文字の装飾効果を全部消すために書いてあります。

説明文の終わりに\f[default]がないと、説明テキストにつけた装飾効果が、それ以降の全部の文字列に適用されてしまうことになります。
つまり、文字の色はずっと変わったままになってしまう、というわけです。

ちなみに、これは(メニューヘルプの文字装飾)のように書くことで呼び出されています。
実はこのように書く必要はないんですが、例えば「やっぱり文字色を変えたい!」と思った時にここ一カ所をいじればいいだけで便利なので、このように書いています。

というわけなので、説明文の文字装飾を個別に設定したい場合は、when分岐の中身をこのように書き換えてください。

when、(メニュー項目の説明表示)==オン、\n\f[color,117,110,86]文字入力ボックスを表示\f[default])

これで、別々の文字装飾をつけることができます。

記述の仕組みの解説

この折りたたみ式メニューは、さくらスクリプトの「\q[タイトル,ID,r2,r3…]」という記述を活用して動いています。

これは、「選択肢を選んだあと、”OnChoiceSelectEx”というイベントが発生する」という、選択肢系のさくらスクリプトです。
なお、OnChoiceSelectExに続いてOnChoiceSelect(選択肢を選んだあとにいつも発生するイベント)も発生するので、*OnChoiceSelectに何か記述してある場合は、それもちゃんと経由されます。

ただ、「\q[タイトル,ID,r2,r3…]」はこのままでは使いたい動きで使えないので、以下のように書いています。

*OnChoiceSelectEx
$EX内のR2=(R2)

これは、OnChoiceSelectExを経由した際に(R2)に入っている文字列を、変数(EX内のR2)に入れてお持ち帰りするための処理です。

このように書かなかった場合、ExのあとにOnChoiceSelectを経由してしまうので、OnChoiceSelectのイベントでR2が上書きされてしまい、R2の中に入っていてほしい文字列が入っていない状態になってしまいます。
つまり、うまく動いてくれないことになります。

コメント

タイトルとURLをコピーしました