小ネタ ストレージのコンテナ化
とあるHPでhactの話題が出てましたので、小ネタを1つ。
私も最初の頃hactタグの応用例の「メッセージ履歴をクリックしたときに実行する TJS 式を生成する」関数の意味が分からずえらく頭を抱えました。
その時に思いついた物ですが、ストレージをコンテナ化すれば作業が楽じゃないだろうか?と言う単純な発想です。
結論から言えば、「マクロでやった方が楽」でしたが、まぁ吉里吉里はこう言う事も出来るんだよとおつきあいください。
まず下記をご覧ください。
@iscript
f.音楽_top = 'kag.bgm.stop(),kag.bgm.play(%[storage:"';
f.音楽_und = '",loop:true])';
f.音楽_mid = [];
//------この中に配列登録------
f.音楽_mid[0] = '無音.wav';
f.音楽_mid[1] = '曲1.wav';
f.音楽_mid[2] = '曲2.wav';
f.音楽_mid[3] = '曲3.wav';
f.音楽_mid[4] = '曲4.wav';
f.音楽_mid[5] = '曲5.wav';
//----------------------------
f.音楽 = [];
for(var i=0 ;i < f.音楽_mid.count ;i++)
{
f.音楽[i] = f.音楽_top + f.音楽_mid[i] + f.音楽_und;
}
@endscript
//音楽を鳴らす実行タグ(例では曲1が流れます)
[eval exp="&f.音楽[1]"]
何をやらせてるのかと言うと、kag.bgm.stop(),kag.bgm.play(%[storage:"曲目",loop:true])と言う文字列をf.音楽[x]に入れて、それを[eval exp="&f.音楽[x]"]で評価して鳴らしています。
一見するとフラグに何か無意味な事をさせてるだけのように見えるのですが、f.音楽[x]の中に前奏を止め新しい曲をループで流すコマンドがすべてパッケージングされてますので、そのフラグの中身を評価して実行――つまり音が鳴るわけです。
配列ですから、f.音楽_mid[]の配列の後ろを書き換えて追加すればいくらでも増やせます。
もちろんCG等にも応用が出来ますし、tjsで制御可能なほとんどのコマンドをパッケージング出来ます。
このコンテナ化の利点は、まずスッキリ見えるため初心者が組むにも設定だけ誰かがしてあげれば簡単にコピペで組めてしまう事。
はめ込むだけですので、CGだろうと音楽だろうと同じレベルで取り扱い出来ると言うのは初心者には大きな利点です。
また逆に、一見するとフラグに何かしてるだけのように見えるためフラグ名を偽装すればスクリプトを覗こうとした人がちょっと見では意味不明に見える事でしょうか。
反面、融通が利かないと言う欠点があります。
それは文字列の中に変数を組み込む事で解決する問題ではありますが、それではコンテナ化した意味が薄れてある意味本末転倒ではあります。
追記20110217a
《修正》
loopの位置指定が間違ってましたので修正しました。
私も最初の頃hactタグの応用例の「メッセージ履歴をクリックしたときに実行する TJS 式を生成する」関数の意味が分からずえらく頭を抱えました。
その時に思いついた物ですが、ストレージをコンテナ化すれば作業が楽じゃないだろうか?と言う単純な発想です。
結論から言えば、「マクロでやった方が楽」でしたが、まぁ吉里吉里はこう言う事も出来るんだよとおつきあいください。
まず下記をご覧ください。
@iscript
f.音楽_top = 'kag.bgm.stop(),kag.bgm.play(%[storage:"';
f.音楽_und = '",loop:true])';
f.音楽_mid = [];
//------この中に配列登録------
f.音楽_mid[0] = '無音.wav';
f.音楽_mid[1] = '曲1.wav';
f.音楽_mid[2] = '曲2.wav';
f.音楽_mid[3] = '曲3.wav';
f.音楽_mid[4] = '曲4.wav';
f.音楽_mid[5] = '曲5.wav';
//----------------------------
f.音楽 = [];
for(var i=0 ;i < f.音楽_mid.count ;i++)
{
f.音楽[i] = f.音楽_top + f.音楽_mid[i] + f.音楽_und;
}
@endscript
//音楽を鳴らす実行タグ(例では曲1が流れます)
[eval exp="&f.音楽[1]"]
何をやらせてるのかと言うと、kag.bgm.stop(),kag.bgm.play(%[storage:"曲目",loop:true])と言う文字列をf.音楽[x]に入れて、それを[eval exp="&f.音楽[x]"]で評価して鳴らしています。
一見するとフラグに何か無意味な事をさせてるだけのように見えるのですが、f.音楽[x]の中に前奏を止め新しい曲をループで流すコマンドがすべてパッケージングされてますので、そのフラグの中身を評価して実行――つまり音が鳴るわけです。
配列ですから、f.音楽_mid[]の配列の後ろを書き換えて追加すればいくらでも増やせます。
もちろんCG等にも応用が出来ますし、tjsで制御可能なほとんどのコマンドをパッケージング出来ます。
このコンテナ化の利点は、まずスッキリ見えるため初心者が組むにも設定だけ誰かがしてあげれば簡単にコピペで組めてしまう事。
はめ込むだけですので、CGだろうと音楽だろうと同じレベルで取り扱い出来ると言うのは初心者には大きな利点です。
また逆に、一見するとフラグに何かしてるだけのように見えるためフラグ名を偽装すればスクリプトを覗こうとした人がちょっと見では意味不明に見える事でしょうか。
反面、融通が利かないと言う欠点があります。
それは文字列の中に変数を組み込む事で解決する問題ではありますが、それではコンテナ化した意味が薄れてある意味本末転倒ではあります。
追記20110217a
《修正》
loopの位置指定が間違ってましたので修正しました。
スポンサーサイト