空想曲線

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

吉里吉里/KAG:使い勝手の良いマクロを作ろう 背景画像編  

2015-06-08[Mon]
cm0
tb0

ゲーム制作の際は必ずといっていいほどマクロを作るけれども
出来ることならば使い回しがきくモノを作っておきたいと思うのが
めんどくさがりなスクリプタのホンネです。

( ゚д゚)< というか私のホンネです

しかしながら「これさえあれば無敵!」なんて都合のよいマクロはありませんし
全ての処理をマクロひとつだけでまかなうのはデメリットが大きいのでオススメしません。

今回から「マクロつくろうシリーズ」と題して、基本的なマクロの作り方や
作るときのコツを書いていこうと思います。製作の参考になれば幸いです。

今回はもっとも使用頻度の高い背景画像編をお送りします。 (*´∀`*)ノ



1.連続で使用してもエラーが出ないマクロになっているか


まずは よろしくないマクロの例から見ていきましょう。


*sample
[ macro name="背景遷移" ]
[ backlay ]
[ image storage=%画像 layer=base page=back ]
[ trans method=crossfade time=%時間|1000 ]
[ wt ]
[ endmacro ]


なぜ このマクロがよろしくないのか考えていきます。
さっきのマクロを使って以下のスクリプトを書いたとします。


*sample
; 背景bg_001を表示
[ 背景遷移 画像=bg_001 ]

; 背景bg_002を表示
[ 背景遷移 画像=bg_002 ]

; 背景bg_003を表示
[ 背景遷移 画像=bg_003 ]


これを実行したときに Enter キーを押しっぱなしでスキップさせるとトランジションが終了する前に
別のトランジションが開始されたよというエラーメッセージとともに処理が止まってしまいます。

この問題を解決するために次の一行を追加します。


*sample
[ macro name="背景遷移" ]
[ stoptrans ]
[ backlay ]
[ image storage=%画像 layer=base page=back ]
[ trans method=crossfade time=%時間|1000 ]
[ wt ]
[ endmacro ]


stoptrans は実行中のトランジションを強制的に終了させるタグです。
実行するとトランジション終了時の画面になります。これにて解決 ъ(゚Д゚)




2.属性を渡して柔軟な対応ができるようにする


マクロ内の image タグの中身を見てみます。


[ image storage=%sto layer=base page=back ]


背景画像をモノクロで表示したり、色調を反転して表示したいときに
[背景遷移 画像=bg_001 grayscale=true rceil=100 gceil=100]
と書いてもマクロ内ではムシされてしまうので、次の《魔法の記号》を追加します。


*sample
[ macro name="背景遷移" ]
[ stoptrans ]
[ backlay ]
[ image * storage=%画像 layer=base page=back ]
[ trans method=crossfade time=%時間|1000 ]
[ wt ]
[ endmacro ]


image の直後にアスタリスク(*)を追加しました。

( ゚д゚)< ラベルの頭についてるのと同じ記号だよ。前後に半角スペース入れてね!

これで image タグの属性をすべて使用できるようになりました。
なお、アスタリスクの後ろに書いた属性の値はそのまま反映されます。


;裏画面のベースレイヤに bg_001 をグレースケールで読みこむ
[ 背景遷移 画像=bg_001 grayscale=true]




3.使いやすくするためにマクロを分割する


マクロ内で実行されている処理の流れを見てみましょう。


マクロ[ 背景遷移 ]の処理の流れ
 1.トランジションを停止する
 2.表画面を裏画面にコピーする
 3.裏画面に背景画像を読みこむ
 4.クロスフェードトランジションを実行
 5.トランジションの終了を待つ

これを1~3と4~5で分割します。理由は簡単。

( ゚д゚)< 背景以外の画像を読みこみたいときに便利!

( ゚д゚)< トランジションのパターンを好きに組める!

( ゚д゚)< というワケでぶった斬る!ヒャッハァ!


*sample
; 裏画面のベースレイヤに画像を読みこむマクロ
[ macro name="背景読込" ]
[ stoptrans ]
[ backlay ]
[ image * storage=%画像 layer=base page=back ]
[ endmacro ]

; クロスフェードトランジションするマクロ
[ macro name="クロスフェード" ]
[ trans method=crossfade time=%時間|1000 ]
[ wt ]
[ endmacro ]

; 別パターンのトランジションを作っておく
; スクロールトランジションするマクロ
[ macro name="スクロール" ]
[ trans method=uscroll from=left time=%時間|1000 ]
[ wt ]
[ endmacro ]


このマクロを使ってスクリプトを書いていきます。


*sample
; ベースレイヤの裏画面にbg_001を読み込む
[ 背景読込 画像=bg_001 ]
1500ミリ秒でクロスフェードトランジション
[ クロスフェード 時間=1500]

;ベースレイヤの裏画面にbg_002をグレースケールで読み込む
[ 背景読込 画像=bg_002 grayscale=true ]
; 前景レイヤ0の裏画面に画像を読み込む
[ img storage=hoge layer=0 top=0 left=0 visible=1 page=back ]
; スクロールトランジションを実行する
[ スクロール ]


トランジションをまとめてマクロにしても構いません。mp 変数の特性を活用しましょう。


[ macro name="トランジション" ]
; mp.スクロールが true のとき
[ if exp="mp.スクロール" ]
[ trans method=uscroll from=left time=%時間|1000 ]
; それ以外はクロスフェード
[ else ]
[ trans method=crossfade time=%時間|1000 ]
[ endif ]
; 共通処理
[ wt ]
[ endmacro ]


実際に使うときはつぎのように書きます。何の処理をしているかひと目で分かるのが理想です。


; クロスフェードトランジション
[ 背景読込 画像=bg_001]
[ トランジション 時間=500]

; スクロールトランジション
[ 背景読込 画像=bg_002 ]
[ トランジション スクロール 時間=1200]


他にもなんかあった気がするんだけど思い出せないので終了します。
次回はこれを活用して立ち絵の表示・消去マクロを作っていきます。

では、今回はこれにてー (´∀`*)ノシ

関連記事

コメント

コメントの投稿

Secret

トラックバック

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

現在のページ

Category

Link

Comment

Mailform

Author

Twitter