現在表示中の画像のファイル名を取得:Almightに触れる20
コンソール画面で遊んでいると現在レイヤーに表示中の画像のファイル名を取得する方法がわかったので、備忘録代わりに書いてみます。
コンソール画面に
almight.layer.fore.base.image[0].src
と打つと
../game/jpg/test02.jpg
という内容が返ってきます。
現在の表ページのベースレイヤーに読み込まれている画像が、gameフォルダの中のjpgフォルダの中にあるということがわかります。
ここからファイル名だけ抜き出したいので substring というものを使います。
../game/jpg/ という部分が余分なのでこの12文字の後の文字列を抜き出すために、以下のように書きます。
almight.layer.fore.base.image[0].src.substring(12)
これをコンソールに打つと
test02.jpg
という内容が返ってきます。
これでファイル名だけを取得することができます。
他にも
almight.layer.fore.base.image[0].src の fore の部分を back にすればベースレイヤーの裏ページの情報を取得できますし、
almight.layer.fore[0].src とすれば、前景レイヤー0の表ページの情報を取得できます。
almight.layer.fore[1].src とすれば、言わずもがな、前景レイヤー1の表ページとなります。
せっかくなので、このレイヤーの情報を取得するものを使って、画面がホワイトアウトするマクロを作ってみました。
まぁホワイトアウトするために、まずはwhite.jpg という画面サイズと同じサイズの白い画像を作る必要がありますが。。。
@macro name="whiteout" @eval exp="tf.nowBaseImage = almight.layer.fore.base.image[0].src.substring(12)" @backlay @layopt layer=0 page="back" visible=false @layopt layer=1 page="back" visible=false @layopt layer=2 page="back" visible=false @layopt layer=3 page="back" visible=false @layopt layer=4 page="back" visible=false @layopt layer="message0" page="back" visible=false @layopt layer="message1" page="back" visible=false @image storage="white.jpg" layer="base" page="back" @trans method="crossfade" time=1000 @wt @wait time=1000 @layopt layer=0 page="back" visible=true @layopt layer=1 page="back" visible=true @layopt layer=2 page="back" visible=true @layopt layer=3 page="back" visible=true @layopt layer=4 page="back" visible=true @layopt layer="message0" page="back" visible=true @layopt layer="message1" page="back" visible=true @image storage="%file" layer="base" page="back" cond="mp.file != undefined" @image storage="&tf.nowBaseImage" layer="base" page="back" cond="mp.file == undefined" @trans method="crossfade" time=1000 @wt @endmacro
tf.nowBaseImage という一時変数に、現在のベースレイヤーの表ページの画像ファイル名を渡し、白い画像をトランジションさせたあと、tf.nowBaseImage に渡してあったファイル名を再度ベースレイヤーに読み込むものです。
ただ、ちょっと使い勝手がよくなるように、他のファイルを指定した場合はホワイトアウトした後に指定した画像を読み込むようにしてみました。
@image storage="%file" layer="base" page="back" cond="mp.file != undefined"
@image storage="&tf.nowBaseImage" layer="base" page="back" cond="mp.file == undefined"
この二行がその動作をする箇所です。
この部分の cond="mp.file != undefined" という箇所がありますが、これは if文みたいなものです。
なので、この場合は、mp.file が undefined じゃない場合は @image storage="%file" layer="base" page="back" を実行するという意味です。
同じように二行目の方は mp.file が undefined だったら一時変数に渡した画像ファイル名を使って画像を読み込むわけです。
マクロを実際に使う際には、
@whiteout とだけ書けば、ホワイトアウトした後に前の画像を表示し、
@whiteout file="hogehoge.jpg" という風にかけばホワイトアウトした後に hogehoge.jpg をベースレイヤーに表示します。
うーん、しかしマクロの中身が長くて鬱陶しいですねぇ。
始めは
@macro name="whiteout" @eval exp="tf.nowBaseImage = almight.layer.fore.base.image[0].src.substring(12)" @freeimage all=true page="back" @layopt layer="message0" page="back" visible=false @layopt layer="message1" page="back" visible=false @image storage="white.jpg" layer="base" page="back" @trans method="crossfade" time=1000 @wt @wait time=1000 @image storage="%file" layer="base" page="back" cond="mp.file != undefined" @image storage="&tf.nowBaseImage" layer="base" page="back" cond="mp.file == undefined" @trans method="crossfade" time=1000 @wt @endmacro
と書いていたんですが、トランジションをまだちゃんと理解していないせいか、ホワイトアウトした後に立ち絵とメッセージレイヤーが表示されませんでした。
表レイヤーと裏レイヤーが入れ替わるから、トランジションを二回したら元に戻るというわけではないのかー?
うーん。