空想曲線

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

吉里吉里/KAG:使い勝手の良いマクロを作ろう 選択肢編  

2015-07-07
2017-06-16
cm0
tb0

マクロつくろうシリーズ最終回(暫定)です。今回のお題は選択肢。


選択肢マクロサンプル1


こういったシンプルな選択肢をマクロで呼び出せるように作っていこうと思います。



1.選択肢表示に使用するメッセージレイヤの設定


専用のフレーム画像を使用する場合は、frame = "ファイル名", opacity = 0で、
メッセージレイヤの幅と高さ、表示位置などは好みに合わせて変更してください。


▼選択肢用のメッセージレイヤ設定
[ macro name=選択肢設定 ]
; 画面の真ん中に表示します
[ position frame="" layer=message0 width=400 height=120 top="&(kag.scHeight-120)\2"
left="&(kag.scWidth-400)\2" opacity=200 visible=1 ]

[ position frame="" layer=message0 width=400 height=120 top="&(kag.scHeight-120)\2"
left="&(kag.scWidth-400)\2" opacity=200 visible=1 page=back ]

[ endmacro ]



2.選択肢用のメッセージレイヤを表示するマクロをつくる


ポイントは「履歴の出力を停止する」「テキストを瞬間表示にする」の2点です。
今回の例では2択または3択の選択肢を想定して作ってありますが
テキストの表示開始座標を調整しているだけで他には何もしていません。


▼これから選択肢出すよマクロ
[ macro name=選択肢はじめ ]
; さっきのマクロを渡す
[ 選択肢設定 * ]
; 履歴の出力を止める
[ history enabled=false output=false ]
; テキストの表示速度を「瞬間」に
[ delay speed=nowait ]
; テキスト中央揃え
[ style align=center ]

; 2択のとき
[ eval exp="mp.y = 20" ]
; 3択のとき
; Y座標を調整しているだけ
[ eval exp="mp.y = 10" cond="mp.3択" ]

; カレントを選択肢用のメッセージレイヤに
[ current layer=message0 ]
; テキストを表示するY座標を指定
[ locate y="&mp.y" ]
[ endmacro ]



3.テキストリンクのマクロをつくる


先に言っておく。凝ったことはできんぞ (`・ω・´)< できませんよ!


▼シンプルなテキストリンクマクロ
[ macro name=リンク ]
; link タグの属性は必要に応じて追加
[ link * target=%tar ]
; 選択肢に表示する文字列
[ emb exp="mp.選択肢" ]
[ endlink ]
[ r ]
[ endmacro ]


実際にスクリプトを書いていくと


*sample
[ cm ]
; 選択肢用のメッセージレイヤとは別のレイヤに書いていると仮定してね
どうしようかなー。[ p ]

; 選択肢表示
[ 選択肢はじめ ]

; 選択肢
[ リンク tar=*001 選択肢="右に曲がる" ][ r ]
[ リンク tar =*002 選択肢="路地裏に入る" ]

; このマクロについては後述
[ 選択肢おわり ]


実行するとつぎのようになります。


選択肢マクロサンプル1


一応、選んだ項目を履歴に残すやり方も書いておきます。
選択肢マクロの中身についてはリファレンスの「@付き文字列即値」を参照してください。
某掲示板の過去スレから抜粋しています。たぶん18スレ目だったと思います。


[ iscript ]

tf.sel = funcion (選択肢)
{
historyLayer.reline(); // 履歴のみ改行
historyLayer.store('→' + 選択肢); // 引数(選択肢の中身)を履歴に書き込む
historyLayer.reline(); // 履歴のみ改行
historyLayer.reline(); // 履歴のみ改行
} incontextof kag;

[ endscript ]

▼リンクマクロ(選んだ項目を履歴に残すバージョン)
[ macro name=リンク ]
[ link * exp="&@'tf.sel(\'${mp.選択肢}\')'" ]
[ emb exp="mp.選択肢" ]
[ endlink ]
[ endmacro ]


実行したときの履歴画面はこんなカンジになります。


選択肢マクロサンプル4


マクロを抜けた時点で mp 変数が無効化されてしまうので、先に変数の中身を展開して
履歴に書き込むという処理を行っています。
ただ、これをやるとクリックしたときに他の変数を評価できなくなるんだけど
わたし、解決法知らないんだよね (´ε`;)< 知ってる人いたら教えてくだちい



4.選択肢の表示を終えるマクロ


選択肢を表示する前に設定した項目をすべて元に戻すだけです。


▼選択肢表示を終えるとき
[ macro name=選択肢おわり ]
; テキストの表示速度をもどす
[ delay speed=user ]
; テキストの書式をもどす
[ style align=default ]
; 履歴の出力をもどす
[ history enabled=true output=true ]
; 選択肢クリック待ち
[ s ]
[ endmacro]



5.選択肢を消去するマクロ


先にスクリプトを書きます。
なお、ここでは選択肢用のメッセージレイヤを message2 に変更しています。


*sample
[ 背景読込 画像=bg_001 ]
[ クロスフェード ]

[ キャラ女 ]
[ フキダシ右 ]
どうしようかな[ p ]

[ 選択肢はじめ 3択 ]
[ リンク 選択肢="右に曲がる" tar=*001 ][ r ]
[ リンク 選択肢="路地裏に入る" tar=*002 ][ r ]
[ リンク 選択肢="ひたすら直進する" tar=*003 ]
[ 選択肢おわり ]

*001
[ cm ]
[ フキダシ右 ]
右に行ってみよっと[ p ]


このまま実行すると選択肢用のメッセージレイヤが画面に残ったままになるので、
以下のマクロを作って放り込みます。


▼選択肢用のメッセージレイヤ消去
[ macro name=選択肢消去 ]
; リンクを押せないようにしておく
[ locklink ]
; 選択肢用のメッセージレイヤを不可視に
[ layopt layer=message2 visible=0 ]
; 選択肢用のメッセージレイヤのテキストをクリア
; ジャンプ先に cm タグがあるので要らないけど念のため
[ eval exp="kag.fore.messages[2].clear()" ]
[ endmacro ]

*001
[ cm ]
[ 選択肢消去 ]
[ フキダシ右 ]
右に行ってみよっと[ p ]


これを実行すると


1.セリフが表示されて……
選択肢マクロサンプル5


2.選択肢が表示される。テキストが左寄せになってるのと、枠がかぶりすぎなのはスルーしてください
選択肢マクロサンプル6


3.選択肢の項目をクリックすると、選択肢の枠だけが消える
選択肢マクロサンプル7


▼選択肢をクロスフェード表示したいときは
 1.操作対象を選択肢用のメッセージレイヤのウラ画面にする
 2.[ リンク ]マクロを書く
 3.クロスフェード
 4.操作対象をメッセージレイヤのオモテ画面にする
 5.[ s ]で進行待ち

▼選択肢をクロスフェードで消去したいときは
 1.[ locklink ]タグでリンクを押せないようにする
 2.[ 遷移準備 ]マクロ
 3.[ layopt layer=message2 visible=0 page=back ]
 4.[ eval exp="kag.back.messages[2].clear()" ]
 5.[ クロスフェード ]

といった流れになります。


冒頭で書いたとおり、マクロつくろうシリーズは今回でいったん終了します。
「使い勝手の良いマクロ」と書いたにもかかわらず分かりにくい箇所が結構あるので
その辺りは追々修正していこうと思っています。ではではー (´∀`*)ノシ

関連記事

コメント

コメントの投稿

Secret

トラックバック

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

Author

Recent

Category

Link

Comment

Mailform

Twitter