リストアップされた項目の選択の挙動
2015年10月18日
ほぼ同じですが、miiverseの投稿
なぜこんなことをするのか
バトルのプログラムを書いている途中に、リストアップされた項目の選択の処理を メニュー画面を処理を統一出来たらいいなと思い、選択の処理を改善しました。
そのコード改良で整理した、ページがあるリストの選択処理について話したいと思います。 こんなこと考えるのは、つまらないかもしれないけど私の中では大切な処理です。 ちゃんとしたゲームまたは、ツールを作る人はこういうこともしっかり考えて欲しいです。
ボタンリピート
何かの選択画面で十字ボタンを長押ししたら普通、 「トッ、…トトトトトトト」と鳴ると思います。 押した瞬間に反応する「トッ」 少し時間を空いてから連続してカーソルが動く「トトトトトトト」 何気ないこの選択時の音の間隔からわかるカーソルの動くタイミングですが、 これがあると無いとでは、選択する項目が多い場合の操作性が大きく異なります。 選択する項目が5つ以上ある場合は必須と言えるでしょう。
これから「トッ」を初押し、 「トトトトトトト」を連続押しと略して言います。
BREPAT命令で手軽に作れますが、タッチ時の処理と統一できたり、 初押しと連続押しが判断できるように自作した方がいいです。 こだわるなら。
ページ送り
画面上で1番下を選択しているときに、 下を押すと、すべての項目が1項目分上に動き、 下の項目が出るようにします。 これと、上にスクロールする処理を書けばページができます。
もっと言うと、ページがあるのならば、右ボタンでページ送り、左ボタンでページを戻せるようにすべきです。 早く下の方にある項目にアクセスできるようになります。 ここでページ送りの時に、画面上の相対位置を維持するということを頭に入れて欲しいです。 なぜなら、ページと絶対位置を同じ分だけ動かすと、ページが1番下にぶつかった時、画面上の相対位置がずれることがあるからです。
相対位置=絶対位置-ページの位置 でいったん相対位置を出して、 ページの飛び出し防止処理をした後に、
絶対位置=ページ位置+相対位置 と絶対位置を求めたほうが確実です。
発売されているソフトでも相対位置がずれることがよくあります。 まあそれくらい気にしなくても良いことかもしれませんが。
ループ
ループは、 1番上の項目を選択しているときに、上ボタンを押すと1番下、
1番下の項目を選択しているときに、下ボタンを押すと、 1番上を選択するものです。
連続押しでループさせるかしないかは、 微妙なところでありますが、 上下ボタンで連続押しのループは気持ちいいので、 私はおすすめします。
ページ送りボタンでのループをさせる場合は、初押しのみにすべきです。 ちなみに世界樹の迷宮ではページ送りでのループがありません。 「ブブー」と音が鳴ります。 ウォークマンではループします。
まとめ
下ボタンを押す
1番下の項目を選択をしているのならば、 1番上の項目を選択する。 画面上の1番下の項目を選択していたのならば、 下に1つスクロールして1つ下を選択する。 それ以外は普通に選択の位置を1つ上にする。
上ボタンを押す
1番上の項目を選択をしているのならば、 1番下の項目を選択する。 画面上の1番上の項目を選択していたのならば、 上に1つスクロールして1つ上を選択する。 それ以外は普通に選択の位置を1つ上にする。
ページ送りボタンを押す
1番下の項目を選択をしている。かつ連続押しでなく初押し。ならば、 1番上の項目を選択する。 ページが1番下ならば1番下を選択する。 それ以外は画面に表示している項目の数の分だけ下を、 選択、スクロールすればいいが、 相対位置を出して、飛び出しを防ぐ処理してから、絶対位置を求めます。
ページ戻りボタンを押す
1番上の項目を選択をしている。かつ連続押しでなく初押し。ならば、 1番下の項目を選択する。 ページが1番上ならば1番上を選択する。 それ以外は画面に表示している項目の数の分だけ上を、 選択、スクロールすればいいが、 相対位置を出して、飛び出しを防ぐ処理してから、絶対位置を求めます。