スポンサーサイト

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

難易度・スピード設定の変更点 - ParaFlaソース

2007. . 04
ParaFlaソースを代理UPしている一方で、
5 & 7keyソースの改造は進めているという。
これには一応意味があります。

一つはユーザ側の使い勝手の良い、できれば軽量化したソースを作ること。
自分だけが使うのではなく、他の人も使うソースですから
フォントはできるだけデバイスフォントを、ということは考えています。
フォントや矢印色を弄るだけでも見た目はぐっと変わってきますし。

もう一つは、ソースの公開を通してできる知識の共有。
ソースを公開することは、材料を与えることになりますが、
同時にこう書いたらどうだろうか、という投げかけでもあります。

これまで改造してきたソースと見比べて、良いところを吸収するも良し。
悪いところ、追加すべき点は自分で直してみるも良し。

・ ・ ・

と、前フリが長くなりましたが、要するに今回直した場所書いてみるから
参考になるなら改造する方は参考にしてください、ということです。
蹴るなら蹴るも良し。その場合はそれなりに意見出してもらえるとうれしいですが。

今回はスピード設定・難易度設定部分の修正箇所です。一気にできないので(ry
・ 「◎スピード設定」の、緑色になっている部分に関するAS。

ここはスピード設定のボタンを管理するASです。

on(press){
  if (_root.speed!=2.5){
    _root.set_spi = parseFloat(_root.set_spi) + 0.5;
    _root.speed = parseFloat(_root.speed)+0.25;
  }else if(_root.speed==2.5){
    _root.set_spi = _root.segspe/10;
    _root.speed = _root.segspe/20;
  }

  // 座標の設定
  _root.set_spy=70+150*(_root.set_spi);
  gotoAndPlay(3);
}


とりあえずここまで。
前のソースだと、if文が大量にあった気がしますがそれを排除しています。

まず最初の if 文です。
「スピードが2.5倍速でなければ」という意味ですが、
実はスピード設定の部分は「0.25倍速ずつプラス」しているだけなので、
1倍速から2.5倍速へ変更している間は特に処理的には変わっていません。
単純に、0.25分だけプラスしてやれば良いことになります。
( _root.set_spi は_root.speed の2倍の値なので2倍加算 )

次の else if は、「スピードが2.5倍速のとき」を表しています。
この次にボタンを押したとき、強制倍速があると
その倍速に移動しないといけないため、わざわざ分けています。

_root.segspe は、指定する強制倍速の20倍に設定されているので、
その倍速に移動したい場合は _root.segspe を逆に20で割ってしまえば良いことに。

これで、1倍速~2.5倍速まで動作します。
3倍速とかにする場合は赤字の 2.5 のところを 3 に直すだけ。これなら手軽です。

最後の座標の設定の部分は、
「倍速の値から矢印がどの座標から出ればいいのか」を計算で求めています。


・ 「◎難易度設定」の、緑色になっている部分に関するAS。

最初に、アクション スクリプト となっているASに注目します。
前のソースと比較すると実はそんなに変わっていません。
だいたいはコメントの通りです。

唯一違うのは、dif = 0; という謎の変数。
これが、難易度を決める変数になっています。
これをどこで使うのかといえば、その上にある緑色部分のAS( テキスト◎ )です。

ここは、難易度設定のボタンを管理するASになっています。

on(press){
  if(_root.difficulty != undefined && _root.key_label != undefined){
    if(_root.difficulty > dif+1){
    // 2譜面目以降
      dif = dif + 1;  // 難易度を1つ進める
      _root.diffi=_root.diff_label[dif];
      _root.keyLabel = _root.key_label[dif];
      _root.diffin=dif+1;
      _root.segspe=20*_root.set_speed[dif];
      _root.set_spi=2*_root.set_speed[dif];
      _root.speed=_root.set_speed[dif];
    }
else{
    // 1譜面目
      dif = 0;
      _root.diffi=_root.diff_label[0];
      _root.keyLabel = _root.key_label[0];
      _root.diffin="";
      _root.segspe=20*_root.set_speed[0];
      _root.set_spi=2*_root.set_speed[0];
      _root.speed=_root.set_speed[0];
    }
  }else{
  // ヘッダがない場合は強制的に7key,Normal
    _root.diffi="Normal";
    _root.keyLabel = 7;
    _root.diffin="";
    _root.segspe=20;
    _root.set_spi=2;
    _root.set_spy=370;
    _root.speed=1;
  }
  gotoAndPlay(3);
}


長いね。うん。
でも前のソースはもっと長かったのです(前ソース参照)
先ほど出てきた「dif」という変数が出てきています。

コメントの通り、最初の2つの if 文を通るためには
「ヘッダを書いた&難易度が2つ以上で、読み込む譜面番号が2以上」
である必要があります。

これ、実は先ほど出てきたスピード設定のASに似ています。
つまり、難易度が一周するまでの内容を青字のところでやっているわけで。
一通り難易度が終わったところで、最初の難易度に戻る処理が次の 「else」文 。
変数「dif」は、難易度を動かすためのカウンターと捕らえておけば良いです。
「dif」は普通の数字なので、大きくしようと思えば大きくできます。

1swfに100個以上の譜面を(ry などといったこともできますが、
通常ではありえないので、事実上難易度に関しては考えなくても良くしたのがこれ。
合作とかに、融通利くのではないでしょうか。

ちなみに、最後の「else」文はヘッダをつけなかったときの処理。
何もしないとバグってしまいますからね・・・
スポンサーサイト

comment

post comment

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

trackback

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