スポンサーサイト

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

ParaFlaソースについて - 4

2007. . 15
前バージョンからの修正方法は前記事を参照してください。

ここから先、改造部分について。随時更新。
・ function fmov_arrow (j, spd) // フリーズアローの動作
・ function judge_arrow (j)    // 矢印、フリーズアローの判定処理
大半は「スタート初期化」でできます。
ただ、根幹に近いので弄りすぎると・・・

まず、[le_s][led_s]... での処理がどこへ行ったかについて触れておきます。
対応する関数は「スタート初期化」内で言うと
「make_arrow」「mov_arrow」。
「make_arrow」が初期設定(load)、
「mov_arrow」が動作設定(enterFrame)です。



> function fmov_arrow (j, spd)
左横の数字は関数内の行数です。
ここではフリーズアローの動作関数について説明しますが、
矢印の動作に関してもほぼ同じです。

1  if (_root.gameovr==1) {
2  this.removeMovieClip();
3  }

ゲームオーバーになったら矢印を消す処理です。

5  if(_root.stop==false && this._currentframe<=2){
分かりにくいと思いますが、これは
ストップでないとき、ここから35行目まで処理する、ということです。
つまりストップ時は特に何もしないと。

6    if(_root.revn[j]==0){this._y-=spd;}
7    else if(_root.revn[j]==1){this._y+=spd;}

6、7行目は矢印が「spd」だけ下に、または上に進むことを表してます。
要するに、矢印がどのくらいのスピードで、どっちに進むのかということ。
_root.revn はリバースかどうか? というのを表してます。

8      this.count--;
矢印がステップゾーンに着くまでにあと何フレームあるか、ということを表してます。
マイナスになったら行き過ぎた、というわけ。
毎フレーム処理なのでストップ時以外1ずつ減らします。

10  /*------ オプション設定 ------*/
11
12  // if(_root.mot=="Dizzy"){
13  //   this.fa._rotation +=2.4;
14  //   this.fal._rotation+=2.4;
15  // }

「Dizzy」の処理です。コメント外せばいつでも使えるように。

16    if((this._y<=190 &&_root.revn[j]==0)
17    || (this._y>=190 &&_root.revn[j]==1)){
18      this._alpha+=_root.aprLabel[j]*(1.5*spd);
19    }

「Appearance」の処理です。
_root.aprLabel は Hidden か Sudden かそうでないかをまとめている変数です。

21  /*------ これより下は判定処理 ------*/
23    if(this.count>=-7){
25    // 判定放棄(ウワァン確定)
26    }else if(this.setflg==false){
27      _root.farrcnt[j]+=2;
28      this.setflg=true;
29    // 枠外判定
30    }else if (this.count<-9 && this.miss!=true){
31      this.miss=true;
32      _root.ikn_j();
33      this.gotoAndPlay("miss");
34    }
35  }

判定処理。と言ってもここでしているのは枠外処理のみ。
23行目はまだ枠外にする必要がない場合。
25~28行目ではまだ枠外になっていませんが、
被り回避のため前もってイクナイを確定させる処理です。
this.setFlg は判定が確定したか? というフラグで、
_root.farrcnt は今判定すべきフリーズアローは何番目?
というのを知るのに使います。
フリーズアローは矢印が対で1つですから2つ加算するわけです。

最後の枠外判定はイクナイを出してフリーズアローバーを暗くさせます。



> function judge_arrow (j)
次は判定処理です。先ほどは枠外でしたが、今度は押したときの処理。
わかれば判定増やしもできるかも。

1  curArr = _root.hAr[j]+"_s"+_root.arrcnt[j];
2  chk = Math.abs(_root[curArr].count);
4  fcurArr = "f"+_root.hAr[j]+"_s"+_root.farrcnt[j];
5  fchk = Math.abs(_root[fcurArr].count);

わかりにくいですが、これは今判定しようとしている
矢印・フリーズアローを表しています。
先ほど「_root.farrcnt」という変数が出てきましたよね。それです。
chk, fchkピッタリのタイミングから何フレームずれているかを表します。
もちろん、小さいほどイイやキターが出やすくなります。

7  // 矢印
8  if(chk<=6 && _root[curArr].setflg==false){

ここでは、矢印が判定範囲に入っているか? というのと、
前に判定を出さなかったか? というのをチェックしています。
この条件がOKなときのみ、9行目以降に移ります。

9    _root.arrcnt[j]++;
10    _root[curArr].suc=true;

9行目で次の矢印に判定を回す準備をします。
10行目は矢印を消す準備をする変数です。

12    // イイ、マターリ、ショボーン
13    if (chk<=3) _root.ii_j();
14    else if (chk<=5)_root.mat_j();
15    else    _root.syo_j();

ここで判定処理です。
chk によって判定。イイ(3フレーム以内)、マターリ(5フレーム以内)、
ショボーン(6フレーム以内)。

16    _root[curArr].setflg=true;
17    _root[curArr].gotoAndPlay("hit");

setflg は先ほど出てきたものと一緒です。
17行目で矢印をふわっとさせて消します。

19  // フリーズアロー
20  }else if(fchk<=7 && _root[fcurArr].setflg==false){
21    _root.farrcnt[j]+=2;
22    _root[fcurArr].suc=true;

今度はフリーズアローの判定へ。
else if になっているのは矢印との多重判定を避けるため。
動作は先ほどと同じです。

23    // フリーズアロー開始フラグ(押し始めの判定)
24    if (fchk<=4){
25      _root[fcurArr]._y=_root[_root.hAr[j]+"_step"]._y;
26      _root[fcurArr]._alpha=100;
27      _root[fcurArr].gotoAndPlay("hit");
28    }else{
29      _root.ikn_j();
30      _root[fcurArr].gotoAndPlay("miss");
31    }
32    _root[fcurArr].setflg=true;
33  }

ほとんど矢印の場合と同じです。
若干判定が甘めなのがわかるでしょうか。「fchk」です。
ピッタリのタイミングから4フレーム以内だとフリーズが光ります。
逆にそれを超えてしまうとイクナイに・・・。
これを応用して2フレーム以内、4フレーム以内で別判定というのもできます。
スポンサーサイト

comment

post comment

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

trackback

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