- ベストアンサー
actionscript2.0のサンプルコードについて理解できない部分があります
- 納得できないactionscript2.0のサンプルコードについて質問です。サンプルコードには変数loopがありますが、その必要性が分かりません。
- 変数loopに関連する記述を削除しても挙動に変化がないため、意味がないように思えます。
- 初心者ですので、変数loopの意味や必要性について平易な解説をお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ご質問の意味の方が納得できませんが...。 > 手元にあるテキストの説明によると、「loopの値がtrueならフレーム1に戻り、 > falseならフレーム移動を行わない」とありますが、 実際にそうなるでしょう? dolls.fla の フレーム1 のスクリプトの冒頭 -------------- var target_mc:MovieClip = dolls_mc; target_mc.stop(); var loop:Boolean = true; //abcMorphムービークリップを動作の対象にするnaviObjインスタンスを作る var naviObj:NaviFrame = new NaviFrame(target_mc, loop); ~略~ -------------- この3行目 var loop:Boolean = true; をこののままにしておけばループしますし var loop:Boolean = false; に変更すればループしません。 変数 loop はちゃんと生きて動作してます。 通常,クラスファイルは使うたびにその中身をイジって使うものではなくて イジらなくて良い汎用的なファイルとしてそのまま使い回しができるように作ります。 ※例えば最初からすでに定義されてあるクラス (例:MovieClipクラス や Mathクラス や LoadVarsクラスなど)の クラスファイルの中など一々見ませんし作り替えないでしょう? それがクラスのメリットです(Documentクラスを除く)。 dolls.fla の var loop:Boolean の値を true や false にするだけで, 「NaviFrame.as」自体は触ることなく全くそのまま同じ物が使えますよね。 そうするためにあるのです。 「NaviFrame.as」の21行目より引用し注釈を書き直します。 --------------------- // 次のフレームへ移動するメソッド「next」を定義 function next() { // もし現在の登録MCのフレームが最終フレームであれば if (mc._currentframe == mc._totalframes) { // なおかつ変数 loop が true であるなら if (loop) { // 登録MCをフレーム1に戻して停止 mc.gotoAndStop(1); } //↑★変数 loop が false であるなら何もしない // ということです(フレーム移動もしないということ)。 // もし登録MCのフレームが最終フレームに達していなければ } else { //次のフレームへ移動させて停止 mc.nextFrame(); } } --------------------- ↑変数 loop の存在意味は大アリです。 ただ最初から, 「ループ再生するものだけ限定としてクラスを作る」 または 「ループ再生しないものだけ限定としてクラスを作る」 というのでしたら変数 loop は不要です。 ただしその場合,ループするしないを変更しようと思うと, 「NaviFrame.as」 を作り替えるとか 「NaviFrameDoLoop」 クラスと 「NaviFrameNotLoop」 クラスのような2つを作っておかなければならないという事態になってしまいます。 つまり汎用性に欠ける出来の良くないクラスとなります。
その他の回答 (1)
- cspl
- ベストアンサー率83% (55/66)
結論から言うと変数loopに意味はあります。 仰る通り、ループのするしない、という仕様が最初からどちらかに決まっていて、 この先もどちらか一方しか使用しない、ということが前提であれば if(mc._currentframe == mc._totalframes) {……} この部分の条件分岐だけで事足りますね。 しかし、こういった類のクラスファイル(ここではNaviframe.as)は 後の仕様変更によっても極力いじらなくても済むように作る必要があります。 たとえば、「今は最後の画像の次に1枚目の画像を表示させてループさせているけど、後からループさせないように変更することになった」場合、クラスファイルをいじらずに、fla内に定義されている変数loopの値をfalseにするだけで、クラスファイルの中身を知らない人でも簡単に更新することができるわけです。 また、これは配布されているファイルなので、いろんな人のニーズに合うように汎用的に作らなければならない、ということもあります。 要はクラスファイルをいじることなく、外側からカスタマイズするための変数だと思っていただければいいと思います。 納得いただけましたでしょうか。
お礼
ありがとうございます。 例題のスクリプトを理解するので一杯で、 先々変更を加えたりする可能性までは考えが及んでいませんでした。 言われてみると、loop変数があったほうが変更はしやすそうですね。 自分が同じようなものを一から作ることになったとき、こういう考えができるか心配ですが。。
お礼
>変数 loop が false であるなら何もしない >ということです(フレーム移動もしないということ)。 まずif構文などの基本的な部分の理解がたりなかったみたいですね。 コメント付きのスクリプトで丁寧に解説していただき、ありがとうございます。 クラスの拡張性を考慮していなかったので、 わざわざloopでの条件分岐を付け加える意味が分からなかったのですが、 ようやく理解できました。