名前入力の処理について

sin
記事: 46
登録日時: 2016年9月29日(木) 21:49

名前入力の処理について

投稿記事by sin » 2021年12月22日(水) 18:50

いつもお世話になっております。

初心の質問で申し訳ないのですが、名前入力の処理で入力した名前が空白だった場合の処理をスクリプトで行う方法はありますでしょうか?

新しいビットマップ イメージ (19).png
新しいビットマップ イメージ (19).png (44.23 KiB) 閲覧数: 1560 回

名前入力には上の画像のように空白の部分がありますが、これも文字として入力できるようになっています。
プレイヤーがこの空白を入力してOKボタンを押した場合、名前が空白として決定されてしまうためゲームバランスを崩してしまうのでこれを避ける方法がないかと思っております。
目的としては、名前入力決定時に名前が” ”だった場合の条件分岐を行い、「正しい名前を入力してください」とメッセージで表示させもう一度ラベルで名前入力の処理に戻し、空白以外の名前が一文字でも当てはめられていればその名前で決定されるようにしたいです。
トピックを調べたのですがいまいちこの事について書かれているものがなかったので質問しました。
これは他のツクラーさんたちにもぶつかる壁だと思うのですがそのことに関して書かれているものがないとなればおそらくすでに何らかの回避方法はあるのでしょう。

どうかよろしくお願いします。

アバター
アーヴェル
記事: 48
登録日時: 2019年5月18日(土) 12:02

Re: 名前入力の処理について

投稿記事by アーヴェル » 2021年12月23日(木) 00:02

こんばんわー。

スクリプトだけで済ませるなら名前入力の直後にこんな感じでどうでしょうか。
アクター番号は1と仮定します。

var checkname = $gameActors.actor(1)._name;
var result = checkname.replace(/ /g,'');
$gameVariables.setValue(1,result);

このスクリプトの後に、条件分岐のスクリプトで
$gameVariables.value(1) == ""

とすれば、 「それ以外のとき」が正常な名前。
そうでない場合が不正な名前となります。


補足して説明します。

var checkname = $gameActors.actor(1)._name;
は、アクター1番の名前を checkname という変数を宣言してそこに代入しています。

var result = checkname.replace(/ /g,'');
は、result という変数に、checkname つまりアクター1番の名前をコピーした文字列に、
replaceを用いて' 'を''に置換しています。
replaceの右のカッコ内は 正規表現 というものを用いています。
プラグインを覗けば割と良く出てくる理解困難な文字列(スクリプト触り始めの頃そう思いました)の正体です。
ここでは説明は省きますが、もし興味があれば調べてみてください。

で。やっていることは(正しい表現かは置いといて)
文字列中の全角スペースを全て空データに置換してる感じです。
よって result の中身は、アクターの名称から全角スペースを全て取っ払った文字列が入ります。

$gameVariables.setValue(1,result);
は、変数1番にresult を代入しています。


最後、条件分岐の
$gameVariables.value(1) == ""
で、変数1番の中身が空の文字列かどうかを確認しています。

後はそうであった場合はラベルで名前入力の処理へ戻せば良いのではないでしょうか?
纏めるとこんな感じのイベントになります。

◆ラベル:再入力
◆名前入力の処理:ハロルド,8文字
◆スクリプト:var checkname = $gameActors.actor(1)._name;
      :var result = checkname.replace(/ /g,'');
      :$gameVariables.setValue(1,result);

◆条件分岐:スクリプト:$gameVariables.value(1) == ""
 ◆文章:なし,なし, ウィンドウ,下
 :  :\n[1]は不正な名前です。
 ◆ラベルジャンプ:再入力
 ◆
:分岐終了
アバター
Plasma Dark
記事: 669
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: 名前入力の処理について

投稿記事by Plasma Dark » 2021年12月23日(木) 02:14

Game_Actor クラスは name メソッドを持っているので、それを使いましょう。
String クラスには trim という便利なものがいるので、それも合わせるとアクター1の名前がホワイトスペースオンリーであるかどうかは、条件分岐にこう書くだけで判定可能です。

コード: 全て選択

$gameActors.actor(1).name().trim().length === 0
アバター
アーヴェル
記事: 48
登録日時: 2019年5月18日(土) 12:02

Re: 名前入力の処理について

投稿記事by アーヴェル » 2021年12月23日(木) 02:41

おぉー。trim ……知らない子でした。簡潔で良いですね。自分も覚えておこう……。

スクリプトでゲーム内変数に代入して変数を経由して条件分岐ってのは冗長だなぁと思いつつ、
条件分岐で一発判定するには自分の知識レベルでは、
プラグイン化して関数化する事でしか出来なかったんですよね。

メソッドの方も覚えておきます。
自分も勉強になりました。ありがとうございますー。
sin
記事: 46
登録日時: 2016年9月29日(木) 21:49

Re: 名前入力の処理について

投稿記事by sin » 2021年12月23日(木) 18:29

>>アーヴェル様
わかりやすく説明ありがとうございます!
昨日この方法を試してうまくいきました。ただもう時間がなかったのでお礼の返信を今日にしようと思っていたところ、Plasma Dark様からの簡潔な方法も提示してくださってたので大変感謝しております!
いままでMV、MZでこの問題についての解決策がなかったことが不思議なくらいですね。
(そう思ってるのは私だけかもしれませんが)

コード: 全て選択

$gameActors.actor(1).name().trim().length === 0

これからこの方法を使わせていただきます。
お二方とも本当にありがとうございました。
来年も良いお年をお迎えください。

“MZ:質問” へ戻る