
メニューの項目がある程度増えてくると、大きなバルーンにして表示したり、サブメニューを作ったりと頭を悩ませることもあると思います。
ただ、大きなバルーンは、慣例として入っていることが多いものの、バルーンによっては対応していない可能性もあります。
ここでは、メニューを折りたたみ式にすることで、1つのバルーンに多くの項目を収める方法と、そのスクリプトのサンプル(里々、YAYA)を紹介します。
内容は続きに。
ただ、大きなバルーンは、慣例として入っていることが多いものの、バルーンによっては対応していない可能性もあります。
ここでは、メニューを折りたたみ式にすることで、1つのバルーンに多くの項目を収める方法と、そのスクリプトのサンプル(里々、YAYA)を紹介します。
内容は続きに。
折りたたみメニューの作り方として、メニューを項目ごとに分解して考えます。
その上で、表示状態なら各種項目を、非表示状態ならカテゴリ名をクリックして各種項目を表示するようにしておきます。
例えば、以下のような感じです。
メニューの表示を開始
カテゴリ1が表示状態か?
yes→カテゴリ1のタイトルと、カテゴリ1の各項目を表示。
no→カテゴリ1のタイトルのみを、選択可能にして表示。選択時は再度メニューを表示する。
上記をカテゴリの数だけ繰り返し、メニューを表示します。
この時、カテゴリ部分にはわかりやすくするため、さくらスクリプトで文字を装飾した方が体裁のよいメニューになります。
しかし、通常の選択肢では、表示内容にさくらスクリプトを入れることはできません。
そこで、カテゴリ部分に限り\__q[ID]表示内容\__qを使用し、文字を装飾して表示してみます。
ただし、このスクリプトでは通常の選択肢と違い、瞬間表示が行われないため、メニューの最初と最後に瞬間表示用さくらスクリプト\_qを用います。
選択肢がアンダーバーが2個、瞬間表示がアンダーバーが1個です。間違えやすいので注意してください。
以下に、動作サンプル画像及び、そのスクリプトを乗せます。
里々とYAYAのものを乗せますが、どちらも同じ動作をします。
スクリプトはpreタグで表示していますが、環境によってはタブや改行がコピーできないこともあるようなので注意してください。
動作サンプル画像

サンプルスクリプト(里々)
サンプルスクリプト(YAYA)
その上で、表示状態なら各種項目を、非表示状態ならカテゴリ名をクリックして各種項目を表示するようにしておきます。
例えば、以下のような感じです。
メニューの表示を開始
カテゴリ1が表示状態か?
yes→カテゴリ1のタイトルと、カテゴリ1の各項目を表示。
no→カテゴリ1のタイトルのみを、選択可能にして表示。選択時は再度メニューを表示する。
上記をカテゴリの数だけ繰り返し、メニューを表示します。
この時、カテゴリ部分にはわかりやすくするため、さくらスクリプトで文字を装飾した方が体裁のよいメニューになります。
しかし、通常の選択肢では、表示内容にさくらスクリプトを入れることはできません。
そこで、カテゴリ部分に限り\__q[ID]表示内容\__qを使用し、文字を装飾して表示してみます。
ただし、このスクリプトでは通常の選択肢と違い、瞬間表示が行われないため、メニューの最初と最後に瞬間表示用さくらスクリプト\_qを用います。
選択肢がアンダーバーが2個、瞬間表示がアンダーバーが1個です。間違えやすいので注意してください。
以下に、動作サンプル画像及び、そのスクリプトを乗せます。
里々とYAYAのものを乗せますが、どちらも同じ動作をします。
スクリプトはpreタグで表示していますが、環境によってはタブや改行がコピーできないこともあるようなので注意してください。
動作サンプル画像

サンプルスクリプト(里々)
##ここから
*0つつかれ
$表示カテゴリ (when,(変数「表示カテゴリ」の存在),(表示カテゴリ),1)
>メニュー表示
#「メニューです。」の読点にφをつけているのは、里々の自動挿入ウェイト回避のため。
#以下処理中のカンマは基本半角カンマだが、コメントのある部分のみ、引数区切りとして使用しているため、全角カンマ。
*メニュー表示
\_q:メニューですφ。
(when,(表示カテゴリ) == 1,#←引数区切り文字、この2つのカンマは両方共全角
\f[color,#CC3333]◯メニュー1\f[color,default]\n
\![*]\q[項目1,メニュー1-1]\n
\![*]\q[項目2,メニュー1-2]
,#←引数区切り文字、このカンマは全角
\![*]\__q[OnCategoryChange,1]\f[color,#CC3333]メニュー1\f[color,default]\__q
)
(when,(表示カテゴリ) == 2,#←引数区切り文字、この2つのカンマは両方共全角
\f[color,#CC3333]◯メニュー2\f[color,default]\n
\![*]\q[項目1,メニュー2-1]\n
\![*]\q[項目2,メニュー2-2]\n
\![*]\q[項目3,メニュー2-3]
,#←引数区切り文字、このカンマは全角
\![*]\__q[OnCategoryChange,2]\f[color,#CC3333]メニュー2\f[color,default]\__q
)
(when,(表示カテゴリ) == 3,#←引数区切り文字、この2つのカンマは両方共全角
\f[color,#CC3333]◯メニュー3\f[color,default]\n
\![*]\q[項目1,メニュー3-1]
,#←引数区切り文字、このカンマは全角
\![*]\__q[OnCategoryChange,3]\f[color,#CC3333]メニュー3\f[color,default]\__q
)
\_q
*OnCategoryChange
$表示カテゴリ (R0)
>メニュー表示
*メニュー1-1
:メニュー1の項目1を選びました。
*メニュー1-1
:メニュー1から2番目を選びました。
*メニュー2-1
:メニュー2の項目1を選びました。
*メニュー2-2
:2の2。
*メニュー2-3
:メニュー2から3番目を選びました。
*メニュー3-1
:メニュー3から1番目を選びました。
##ここまで
サンプルスクリプト(YAYA)
// ここから
// マウスダブルクリック(SSPから呼び出される)
// reference[]
// 0:マウスカーソルの x 座標(ローカル座標)
// 1:マウスカーソルの y 座標(ローカル座標)
// 2:常に0。
// 3:本体の場合は0、相方の場合は1。SSP/CROWでは2以降もある。
// 4:当たり判定の識別子。
// 5:左クリックは0、右クリックは1。
// 6:※SSPのみ
// windows7以降、マルチタッチ対応環境のタッチパネル(※タッチパッド不可)からの入力でtouch、
// マウスなどからの入力でmouse
OnMouseDoubleClick
{
// 本体側、かつ当たり判定の設定がない部分のみメニュー表示する
if ( reference[3] == 0 && STRLEN( reference[4] ) == 0 )
{
// 初期化の必要がないよう、変数がない場合は作成しておく
if ( ISVAR(category) == 0 )
{
category = 1
}
// メニュー呼び出し
displayMenu()
}
}
// メニュー表示
displayMenu
{
// 出力がややこしくなるので、変数に一旦格納しておく
_menu = ''
// 瞬間表示開始
_menu += '\_q'
// メニューセリフの表示
_menu += '\0メニューです。\n'
// メニュー項目1の作成
if ( category == 1 )
{
_menu += '\f[color,#CC3333]◯メニュー1\f[color,default]\n'
_menu += ' \![*]\q[項目1,OnMenuSelect1_1]\n'
_menu += ' \![*]\q[項目2,OnMenuSelect1_2]\n'
}
else
{
_menu += '\![*]\__q[OnCategoryChange,1]\f[color,#CC3333]メニュー1\f[color,default]\__q\n'
}
// メニュー項目2の作成
if ( category == 2 )
{
_menu += '\f[color,#CC3333]◯メニュー2\f[color,default]\n'
_menu += ' \![*]\q[項目1,OnMenuSelect2_1]\n'
_menu += ' \![*]\q[項目2,OnMenuSelect2_2]\n'
_menu += ' \![*]\q[項目2,OnMenuSelect2_3]\n'
}
else
{
_menu += '\![*]\__q[OnCategoryChange,2]\f[color,#CC3333]メニュー2\f[color,default]\__q\n'
}
// メニュー項目3の作成
if ( category == 3 )
{
_menu += '\f[color,#CC3333]◯メニュー3\f[color,default]\n'
_menu += ' \![*]\q[項目3,OnMenuSelect3_1]\n'
}
else
{
_menu += '\![*]\__q[OnCategoryChange,3]\f[color,#CC3333]メニュー3\f[color,default]\__q\n'
}
// 瞬間表示終了
_menu += '\_q'
// メニューセリフだけを普通のトークと同じように表示したい場合、
// この処理の最初の方にあるメニューセリフの表示を削り、以下を表示する。
// _menu = '\0\n' + _menu
// _menu += '\_l[0,0]メニューです。'
// メニュースクリプトの出力
_menu
}
// メニューカテゴリ変更イベント(SSPから呼び出される)
// reference[]
// 0:選択したカテゴリナンバー
OnCategoryChange
{
// 文字列が渡された時に無効化して0にするため変換をかませる
category = TOINT( reference[0] )
// メニュー呼び出し
displayMenu()
}
// メニュー項目1-1
OnMenuSelect1_1
{
'\0\s[0]メニュー1の項目1を選びました。'
}
// メニュー項目1-2
OnMenuSelect1_2
{
'\0\s[0]メニュー1から2番目を選びました。'
}
// メニュー項目2-1
OnMenuSelect2_1
{
'\0\s[0]メニュー2の項目1を選びました。'
}
// メニュー項目2-2
OnMenuSelect2_2
{
'\0\s[0]2の2。'
}
// メニュー項目2-3
OnMenuSelect2_3
{
'\0\s[0]メニュー2から3番目を選びました。'
}
// メニュー項目3-1
OnMenuSelect3_1
{
'\0\s[0]メニュー3から1番目を選びました。'
}
// ここまで


