スポンサーサイト

--. . --
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ParaFlaソース ver 3.3.1

2008. . 23
今回の更新の修正点について。
長いので追記にします。

でもその前に。
---
< 重要 >
10/19にParaFlaソースを更新しました。
特にハーフウェイ常備の方にはネックなバグなので修正を推奨します。
(差し替えるほどではなく、分かればすぐ直せますので下を参考に)
対象はver fd 3.0.0以降。

「譜面計算」AS (ID:901)で
   while(_root.dist_y-startY>0){
を検索して(スクリプトの空欄に入れて検索ボタンを押す)、
   while(_root.def_spy-startY>0){
に置き換えてください。
---

では本題へ。
▽ ver fd 3.3.1

譜面計算部分の効率を上げます。重くなければ特に対策する必要はありません。
対象:ver fd3.0.2以降

<譜面計算> (ID:901)

function push_tune(){
 ・・・
}
の部分を丸々次のスクリプトに置き換えます
赤字が変更箇所です。
(色変化スクリプトを入れている方は注意)

※ 追記
今思えば、色変化スクリプトを入れてなければ
「譜面計算」部分を ver fd3.3.1から丸コピして全上書きしてもOKです。
そっちの方が早いですよね(←

//
// フレームごとの配列に変換
function push_tune(){

  var loadOK2=false;
  _root.loadStart=true;

  _root.start_point = new Array();
  _root.fstart_point = new Array();
  _root.frzLength = new Array();
  _root.initY = new Array();
  _root.judgeY = new Array();
  _root.bstTime = new Array();

  if(!isNaN(parseFloat(_root.speed_dac[0]))){
    _root.speed_dac.unshift(0,1);
  }


  for(j=0;j<11;j++){   // 11key対応ソースでない場合は11を7にする
    //
    // 矢印をどのタイミングで出すかを調べる
    // (与えられたデータはステップゾーンに来たときのフレームのため)

    if(!isNaN(parseFloat(_root.timeline[j][0]))){
      _root.start_point[j]=new Array();

      //
      // 速度変化が無い場合の対策

      if(!isNaN(parseFloat(_root.speed_dac[0]))){
        var spdn = _root.speed_dac.length-2;
        var spd_th = Number(_root.speed_dac[spdn]);
      }else{
        var spd_th = 0;
      }

      //
      // 速度変化上の問題から、後ろのデータからチェック

      var lastn = _root.timeline[j].length-1;
      var num = get_start(j,lastn,_root.timeline[j][lastn],"");

      if(_root.mkArrow[_root.start_point[j][lastn]]==undefined){
        _root.mkArrow[_root.start_point[j][lastn]]=new Array();
      }
      _root.mkArrow[_root.start_point[j][lastn]].push(j);

      for(k=_root.timeline[j].length-2;k>=0;k--){
        if(_root.timeline[j][k]-_root.judgeY[num]>spd_th){
          //
          // 最初から最後まで同じスピードのときは
          // 計算せず前の矢印データを流用する

          var arr_frame = _root.timeline[j][k]-_root.judgeY[num];
          _root.start_point[j][k] =arr_frame;
          _root.initY[arr_frame] =_root.initY[num];
          _root.judgeY[arr_frame] =_root.judgeY[num];
          _root.bstTime[arr_frame]=_root.bstTime[num];
        }else if(_root.timeline[j][k]>spd_th){
          //
          // 合間に速度変化が入る場合はこれまで通り計算

          num = get_start(j,k,_root.timeline[j][k],"");
        }else{
          spdn -= 2;
          spd_th= Number(_root.speed_dac[spdn]);
          num = get_start(j,k,_root.timeline[j][k],"");
        }

        if(_root.mkArrow[_root.start_point[j][k]]==undefined){
          _root.mkArrow[_root.start_point[j][k]]=new Array();
        }
        _root.mkArrow[_root.start_point[j][k]].push(j);
      }

    }

    //
    // フリーズアローをどのタイミングで出すかを調べる
    // (与えられたデータはステップゾーンに来たときのフレームのため)

    if(!isNaN(parseFloat(_root.ftimeline[j][0]))){
      _root.fstart_point[j]=new Array();
      _root.frzLength[j] =new Array();

      if(!isNaN(parseFloat(_root.speed_dac[0]))){
        var spdn = _root.speed_dac.length-2;
        var spd_th = Number(_root.speed_dac[spdn]);
      }else{
        var spd_th = 0;
      }
      var lastn = _root.ftimeline[j].length-2;
      var num = get_start(j,lastn,_root.ftimeline[j][lastn],"f");
      getfrzlength(j,lastn);

      if(_root.mkFArrow[_root.fstart_point[j][lastn]]==undefined){
        _root.mkFArrow[_root.fstart_point[j][lastn]]=new Array();
      }
      _root.mkFArrow[_root.fstart_point[j][lastn]].push(j);

      for(k=_root.ftimeline[j].length-4;k>=0;k-=2){
        if(_root.ftimeline[j][k]-_root.judgeY[num]>spd_th){
          var arr_frame = _root.ftimeline[j][k]-_root.judgeY[num];
          _root.fstart_point[j][k]=arr_frame;
          _root.initY[arr_frame] =_root.initY[num];
          _root.judgeY[arr_frame] =_root.judgeY[num];
          _root.bstTime[arr_frame]=_root.bstTime[num];
        }else if(_root.ftimeline[j][k]>spd_th){
          num = get_start(j,k,_root.ftimeline[j][k],"f");
        }else{
          spdn -= 2;
          spd_th= Number(_root.speed_dac[spdn]);
          num = get_start(j,k,_root.ftimeline[j][k],"f");
        }

        getfrzlength(j,k);
        if(_root.mkFArrow[_root.fstart_point[j][k]]==undefined){
          _root.mkFArrow[_root.fstart_point[j][k]]=new Array();
        }
        _root.mkFArrow[_root.fstart_point[j][k]].push(j);
      }

    }
  }
  if(!isNaN(parseFloat(_root.boost_dac[0]))){
    for(k=0;k<_root.boost_dac.length;k+=2){
      get_boost(k,_root.boost_dac[k]);

      //
      // スピードの上限設定(個別加速)
      if(_root.boost_dac[k+1]*
        _root.speedTmp[_root.boost_dac[k]]>_root.top_spd*2){
        if((_root.top_spd*2)/
           _root.speedTmp[_root.boost_dac[k]]>1){
          _root.boost_dac[k+1]=
            (_root.top_spd*2)/
             _root.speedTmp[_root.boost_dac[k]];
        }else{
          _root.boost_dac[k+1]=1;
        }
      }
    }
  }
  _root.arr_spd=[];
  if(_root.frame_num==0){
    _root.arr_spd.push(0);
    _root.arr_spd.push(_root.speedTmp[0]);
  }
  for(f=1;f<=_root.framelimit;f++){
    if(_root.speedTmp[f]!=_root.speedTmp[f-1]){
      _root.arr_spd.push(f-1);
      _root.arr_spd.push(_root.speedTmp[f]);
    }
  }

  delete _root.speedTmp;
  delete spd_th; delete spdn; delete num;

  mes2.text="一時変数を削除しています";
  mes2.setTextFormat(fmt2);

  _root.loadStart=false;
  loadOK2 = true;
  return loadOK2;
}

---

function get_start(j,k,num,header){
   ・・・
}

とある }  の前に
return num;

と入れます。これでOK。


---

(原理のようなもの)

<変更前>
矢印1つ1つについて矢印の出現タイミングを計算
→ 矢印数が多く、ステップゾーン到達に時間のかかる場合だと時間がかかる

<変更後>
スピードが最初から最後まで同じ矢印については
矢印の出現からステップゾーンまでの時間は同じはず
→ 1つ調べたら後は速度変化が行われるまで計算しない


なので、速度変化(途中変速)の少ない譜面だと処理時間がより短くなるかと。
仮に速度変化が多くても、ひたすら変化することは少ないので短くなると思います。
ただ内部処理なので、メインには影響しませんが。
スポンサーサイト

comment

post comment

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

trackback

trackbackURL:http://alprime.blog91.fc2.com/tb.php/103-853007a4
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。