空想曲線

吉里吉里2/KAG3でのゲーム制作に使える小ネタ置き場。ゲーム用素材も置いてます。

吉里吉里/KAG:名前入力画面を作ってみよう  

2012-01-24[Tue]
cm0
tb0

吉里吉里/KAGちょいネタ 11回目щ(゚д゚щ)

「主人公の名前を好きにつけられる」機能を実装してみましょう。
文字入力には[edit]タグ、もしくは[input]タグを用いますが、
使い方がカンタンなのは[edit]の方だと思うので、そちらメインで。

なお、今回のスクリプトを組むにあたってcuocersiさまで配布されている
名前入力のシナリオサンプルを参考にさせて頂きました。
丁寧かつ楽しいノリの吉里吉里講座もオススメですよー(´∀`*)



1.主人公の名前を変数にする


できれば苗字と名前で分けた方がいいです。
そうでないとフルネームで呼ばれ続けます。何の罰ゲームですか。
ちなみに名前はシステム変数を使用しています。

; 主人公の苗字
[ eval exp="sf.name1 ='伊藤'" ]
; 主人公の名前
[ eval exp="sf.name2 = '誠'" ]

デフォルト名は「伊藤誠」にしてみました。死亡フラグしか見えません。



2.名前入力画面を作る


凝った画像や画面を作るのは後でいいんだよ、後で。
20120122_02.jpg

*edit
[ cm ]
[ nowait ]

あなたの名前を教えてね。[ r ][ r ]
苗字
[ edit color="0x0000FF" length=200 maxchars=4 name=sf.name1 ][ r ]
名前
[ edit color="0x0000FF" length=200 maxchars=4 name=sf.name2 ][ r ][ r ]
[ font size=15 ]
※全角4文字以内でそれぞれ入力して下さい[ r ][ r ]
[ resetfont ]

[ link target=*ck_name ]
これでよい[ endlink ][ r ]
[ link exp="kag.callExtraConductor('','*defaultname')" ]
デフォ名に戻す[ endlink ][ r ]

; リンクフォーカス→苗字部分のエディット欄にフォーカスします
[ eval exp="kag.fore.messages[0].links[0].object.focus()" ]
; シナリオの進行を止めます
[ s ]

editタグの属性
 bgcolor:エディット欄の背景色(def=0xFFFFFF)
 opacity:エディット欄の背景色の透明度(def=255)
 color:エディット欄の文字色(def=0x000000)
 length:エディット欄の長さ(単位:pixel)
 maxchars:入力可能な文字数の上限
 name:入力したい文字。通常は変数を指定します

※「デフォ名に戻す」のリンク先については後ほど説明します



3.入力された名前を判定する


「これでよい」を選択すると*ck_nameのラベルにジャンプして入力された名前を確認します。

が、ここで問題。

プレイヤーは時として、私たちの予想斜め上を行きます

考えられる限りの斜め上っぷりを想定し、ひとつずつ潰していきましょう。



3-A:名前欄に何も入力されていない場合


このままで確定させると主人公の名前が名無しになります。
誰にも呼んでもらえません。切ないですね。
edit欄が空白のときには警告メッセージを出して入力画面に戻しましょう。

20120122_03.jpg

*ck_name
; 入力内容を確定します
[ commit ]
[ nowait ]


[ iscript ]
// 苗字、名前のいずれかが空白のとき
if(sf.name1 == '' || sf.name2 == '')
 {
  System.inform('空白欄があるよ。もう一度入力してね');
// 警告
  kag.process('','*edit'); // *editへジャンプ
 }
[ endscript ]

System.informはムリに使わなくて構いません。こういうやり方もあるという紹介です。
通常は次の3-Bのやり方がオススメです。



3-B:使って欲しくない名前がある


今さらですが元ネタは「nice boat」で一時期有名になったアレです。
20120122_04.jpg

他の人物と名前がガチかぶりされると色々困ると思います。
それを避けるために次のようなスクリプトを書きます。

; 使って欲しくない名前を入力されたとき
[ if exp="sf.name1 == '桂' && sf.name2 == '言葉'" ]
[ cm ]

その名前は恐ろしくて使えません。[ r ]
別の名前にして下さいお願いします。[ p ]
[ jump target=*edit ]
[ endif ]

上記のスクリプトだと同姓同名の場合のみ警告が出ます。
どちらか片方でもかぶってるのがイヤなときは「&&」を「||」に変更して下さい。

実行するとこうなります。ヤンデレがカワイイのは二次元だけだよね。
20120122_05.jpg



3-C.文字数が上限を超えている場合


これは[ input ]タグを使用した場合のみです。
[ edit ]タグはmaxcharsで文字数の指定が出来るので基本的には必要ありません。

たとえば、こんな名前を入力する人がいるかも知れません。
20120122_08.jpg
↑ありがちな例

これを避けるために次のスクリプトを書きます。

[ if exp="sf.name1.length >= 5" ]
名前長すぎ。もっかい入力してね。[ p ]
[ jump target=*戻りたいラベル名 ]
[ endif ]

「.length」は変数に入っている文字列の長さを取得してくれます。

 sf.name1=伊藤なら
 sf.name1=寿限無寿限無五劫の擦り切れなら13

ここでは、変数sf.name1の長さが5以上のときに警告を出します。
20120122_09.jpg

反対に、名前を一文字以上に指定したい場合は
editを指定している場合でも以下のようなスクリプトが必要です。
[ commit ]タグを入れ忘れないように注意しましょう。

[ if exp="sf.name1.length < 2" ]
[ cm ]

名前短すぎ。もっかい入力してね。[ p ]
[ jump target=戻りたいラベル名 ]
[ endif ]



3-D:デフォルト名に戻したい


名前を考えるのが面倒になった、うっかり名前を消してしまって
元の名前を忘れた方のためにデフォルト名に戻せるようにしましょう。

; デフォルト名に戻したいとき
*defaultname
[ eval exp="sf.name1 = '伊藤'" ]
[ eval exp="sf.name2 = '誠'" ]
[ return ]

[ link exp="kag.callExtraConductor('','*defaultname')" ]の呼び出し先です。
これでエディット欄の名前がデフォルトに戻ります。
このスクリプトは*ck_nameの中ではなく別の場所に書いてください。



4.入力した名前でOKかどうか確認してもらう


清々しいくらいの手抜き画面だね!(*´∀`*)
20120122_12.jpg

*ck_name内の判定で不備がなければここへジャンプします。
入力した内容を確認してもらいOKならそのままゲーム本編へ 、
NGならもう一度名前入力画面へ戻します。

; 名前用の変数を宣言
[ eval exp="sf.name1 ='伊藤'" ]
[ eval exp="sf.name2 = '誠'" ]


*edit
(省略)

*ck_name
[ cm ]
; 空白部分があるとき
[ if exp="sf.name1 =='' || sf.name2 == ''" ]
(省略)
; 使って欲しくない名前だったとき
[ elsif exp="sf.name1 =='桂' && sf.name2 =='言葉'" ]
(省略)
; 文字数が制限を超えていた場合の処理(inputのみ)
[ elsif exp="sf.name1.length >=5 || sf.name2 >=5" ]
(省略)
; どれにも当てはまらないとき
[ else ]
[ jump target=*ck_name2 ]
[ endif ]


; デフォルト名に戻したいときのサブルーチン
*defaultname
(省略)
[ return ]

; 名前の最終確認
*ck_name2
[ cm ]
あなたの名前は[ emb exp=sf.name1 ][ emb exp=sf.name2 ]ですね。[ r ]
これでよろしいですか?[ r ][ r ]

[ link target=*ck_OK ]おっけー[ endlink ][ r ]
[ link target=*ck_NG ]やっぱやめ[ endlink ]
[ s ]

*ck_OK
[ cm ]
それでは、この名前でゲームを開始します。[ p ]
[ jump storage=ゲーム本編のシナリオファイル名 ]
[ s ]


*ck_NG
[ cm ]
この優柔不断男めが![ p ]
[ jump target=*edit ]
[ s ]

「おっけー」を選ぶと本編へGO
20120122_13.jpg

「やっぱやめ」を選ぶと罵倒された後、*editへ戻ります
20120122_14.jpg

以上で終了です。おつかれっしたーヾ(*´∀`*)ノ


関連記事

コメント

コメントの投稿

Secret

トラックバック

トラックバックURL
→http://kopacurve.blog33.fc2.com/tb.php/187-ebbe9f41
この記事にトラックバックする(FC2ブログユーザー)

現在のページ

Category

Link

Comment

Mailform

Author

Twitter