まるちゃん 2020/02/10 21:10

選択肢拡張のスクリプト

たまにスクリプトを作っていてこれ頭いいんじゃない?
って思うときが自分にはあります
eval というコマンドを発見して能力値を自由に設定できるスクリプトを
作ったときも自分は天才だって思っちゃいました ^^;
binding コマンドを発見したときは ruby ってすげーってなりました

また、そう思ってもしばらくすると大したことなかったなってときもあります
今回がそれでした。スクリプトとしては不完全ですね
動作確認をしっかりとしないですげーのできたと思ったら
そうじゃなかったっていう話でした
メッセージウィンドウが閉じてしまうのはいただけない

選択肢拡張のスクリプトは数多いと思いますが使うのが難しくありませんか?
別に批判してるわけじゃなくて、自分3行以上の文章が読めないっていうか
3行以上読む忍耐力がなくてわからんからいいやってなります
今回はまだアップグレードのシーンが納得行かなくて
また作っています
そのときにメッセージウィンドウを使って作ろうってことになって
スクリプトを使い文章を入力したりしてました
しかし、マルチバイト文字?とか言うののせいで
幅をきっちり合わせることができなくて断念しようかどうかとういところです


左側がスクリプトを使ってシーンを作りました
右側がメッセージウィンドウを使ったものです
そのときに選択肢もスクリプトで入力したんですけど
sprintf 構文で %12d でやってるのに右揃えにならないんですね
だからシーンを作るしかないのかなぁって

そのときにスクリプトを使って文章の表示をしたのです
$game_message.add(text) を使うことで表示できるのですが
その後にイベントコマンドで選択肢の表示をすると
メッセージウィンドウを一度閉じてから出ないと選択肢が表示されません
なので選択肢の表示もスクリプトを使い操作する必要がありました
ツクールではどのように選択肢を表示しているのかというと詳しくはここです

[[RGSS3]ツクールVXAceのスクリプトで選択肢の表示を行う方法]
(http://rpgmaker-script-wiki.xyz/sentakusi_vxace.php)
どういう感じか見るのにすごく役に立つページです

Ctrl + Shift + F で選択肢で検索して Game_Interpreter にあるのを見ました
setup_choice(@params) とあります
@params の内容は配列で [["はい", "いいえ"], 2 ] という感じです
第1引数が選択肢に表示する内容で配列を持ちます
第2引数がキャンセルの場合の index を示します
イベントコマンドでは "はい" が1番目の選択肢になります
プログラマーの人は0から数えてしまいがちですが違います

またスクリプトを使うので選択肢が4以上の場合も可能になります
[["1", "2", "3", "4", "5"], 6]と @params の場所にかけばおkです

多分正確にやるにはイベントコマンドのスクリプトにこう書きます
(def command_102 をみてください)
自分は setup_choice のみしかしてないけど動いてます

wait_for_message
setup_choices(@params)
Fiber.yield while $game_message.choice?

紹介した URL でも同様のことをしています
その後にどの選択肢を選んだかを調べるのが case $branch より下です
これは面倒ですのでスクリプトで解決しました

選択肢拡張.txt (1.02kB)

ダウンロード

Window_ChoiceList の call_ok_handler と call_cancel_handler で
どの選択肢を選んだのか変数を代入するスクリプトを作りました
つまり case $branch より下の処理がいらなくなります

もう少しこのスクリプトを使いやすくして
表示位置とか設定できるようになるといいなぁと…
自分が3行以上読めないのに説明するのに何行書いたんだか…

使い方のまとめ

イベントコマンドのスクリプトに以下のように書く
setup_choice(@params)
@params には例として [["1", "2", "3", "4", "5"], 6] とかく
6 というのはキャンセルしたときのインデックスです
選択肢は0からではなく1から数えます
CHOICE_INDEX には選択肢を選んだときの index を保持する
イベントコマンドで使用する変数の番号です


7行…

選択肢拡張|しいたけサイクロン
http://tentako.blog-fps.com/rgss/選択肢拡張
なんかこれのほうがもっとスマートかも…
唯一いいところは新たな関数を作らずにデフォルトのままできたところ

更新

まだちょっと安定した動作っていうのが望めないのかもしれない
Proc.new っていうのがよくわからない
なんか値が残って変な動作するかもしれない

$game_message.choice_proc = Proc.new {|n| @branch[@indent] = n }
これの書き方を変えたほうがいいのかも
Proc.new {|n| $game_variables = n } これでいいのかもしれない?
ぬ?難しいなメッセージウィンドウが閉じてしまう
スクリプトだけで作っているときはそうではなかったのに…
メッセージウィンドウが閉じてしまうのはだめだ!
もう少し作り直すか諦めます
しいたけサイクロンさんの使うといいと思います

Proc というのは通常関数を定義して内容を書きます
def foo
var = 1
end
みたいな
でもこの関数定義をしなくても内容だけ作れるっていうものみたいです
あれ?これすごそうだぞ!?

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

限定特典から探す

記事を検索