FC2ブログ

工房瓦版

創作関係の趣味ブログ

吉里吉里で任意のtjs式を任意の時間ずらして実行させる

 playseで効果音を鳴らしたい!
 でも、音が鳴るのは、画面上のドットアニメーションの動きとあわせたい!
 そのためには、playseで音がなるタイミングが、タグの実行時よりも0.5秒ぐらい遅れてくれたほうがいい!


 そういうニーズを満たすために、任意のtjs式を任意の時間ずらして実行させる機能を追加しました。

 概略としては、「ある文字列(tjs式)を記録した変数を常時実行するScripts.evalを裏に仕込む」というものです。

var dtjs_max = 10;//文字列を記録できる上限
var dtjs_now = 0;//記録する番号

tf.delay_tjs_exp = [];//ディレイ実行したいtjs式を記録する配列
tf.delay_tjs_TickCount = [];//ディレイ実行したいtjs式が記録された時間
tf.delay_tjs_time = [];//遅延時間
tf.delay_tjs_flag = [];//実行したかどうかの記録。-1で実行待ち、1で実行済み

function input_delay_tjs(word,delay){//word : tjs式を文字列で代入。 delay : 何秒遅れて実行するか
  var n = dtjs_now%dtjs_max; dtjs_now++;
  tf.delay_tjs_exp[n] = word;
  tf.delay_tjs_TickCount[n] = System.getTickCount();
  tf.delay_tjs_time[n] = delay;
  tf.delay_tjs_flag[n] = -1;
}
function delay_tjs(){
    for(var n = 0; n < dtjs_max; n++){
      if(tf.delay_tjs_flag[n] == -1){
        //↓予約した時間がきていれば実行する
        if(System.getTickCount() - tf.delay_tjs_TickCount[n] >= tf.delay_tjs_time[n]){
          Scripts.eval(tf.delay_tjs_exp[n]);
          tf.delay_tjs_flag[n] = 1;
        }
      }
    }
}


 シンプルに書くと上のようになります。
 delay_tjsを裏で動かしておけば、input_delay_tjsを使って、任意のtjsを任意の時間遅らせて実行させる事ができるようになります。

 例えば、

[eval exp="input_delay_tjs('kag.tagHandlers.playse(%[storage:\'hit\',buf:\'1\'])', 2000)"]
[eval exp="input_delay_tjs('kag.tagHandlers.playse(%[storage:\'爆発\',buf:\'1\'])', 3000)"]


とすれば、このタグを読んだ2000ms後にhit音が鳴って、そこから1000ms後(つまり最初から3000ms後)に爆発音が鳴ります。

 このような機能は、シンプルなノベルであれば不要です。素直にwaitタグで2000ms待ってからplayseタグを実行すればいいので。
 しかし、リアルタイムに画面が動いているようなゲームであれば、悠長にwaitタグでゲーム進行を止めていられないケースが多々あるので、予約的に先行指定できる仕組みは非常に便利です。

【追記】
 KAGEXであればdelayrunを指定し、
 [playse storage="hit" delayrun="2000"]
 のようにしても遅延実行できます(参考)。
 便利ですね。というか、↑の作業した後に気づくとか・・・。

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://kuonkobo.blog82.fc2.com/tb.php/946-f2ae3dcb
この記事にトラックバックする(FC2ブログユーザー)