ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Flash Action Scriptコミュのif文の条件式での評価と実行されるステートメントについて

  • mixiチェック
  • このエントリーをはてなブックマークに追加
はじめまして
if文を使っていて、疑問がありトピック作成させていただきます。
初歩的な事だと思うのですが、
どうぞ宜しくお願い致します。


_root.bottons.btn5_mc に以下を記述

on (rollOver) {
_root.fukidashi.fFukidashi = false;
}

on (rollOut) {
_root.fukidashi.fFukidashi = true;
}



_root.fukidashi に以下を記述

onClipEvent (load) {

fFukidashi = false;

function xFukidashi() {

if (fFukidashi) {
gotoAndPlay(2);
}

this._x = _root._xmouse+30;
this._y = _root._ymouse+30;


}
}


onClipEvent (enterFrame) {
xFukidashi();
trace(fFukidashi);

}

した際に、_root.fukidashi上のif文で変数「fFukidashi」が「false」の際に
ステートメント(gotoAndPlay(2);)が実行されている様です。

一応上記のコードは意図したフラグの使い方とは逆にtrueとfalseを
代入し、結果現象としては意図通りに動いてます。

if  (条件式trueだった場合) {実行されるステートメント}
という理解をしておりましたので、少々混乱しております。

記述もしくは私の理解自体に何か誤りがあるのでしょうか。
ご教授のほど宜しくお願いします。

環境
imac(intelmac) MacOS10.4.11
ADOBE FLASH CS3 Professional
パブリッシュ設定
FlashPlayer6
ActionScript 2.0

コメント(8)

実際にまったく同じソースで実験してみましたが、ちゃんとtrueでgotoAndPlay(2)が実行されています。

trueのときはonEnterFrameの度にgoto(2)してるので、fukidashiが2フレームより先に行くことはありませんが、falseになった瞬間にgotoAndPlay(2)が「実行されずに」2フレーム目から先へ動き出すので誤解なされたのではないでしょうか?
_root.fukidashi は、何フレームあるのでしょうか?
fukidashi のフレーム構成や記述したスクリプトについても
説明が必要であるように思います。


fFukidashi が true の場合、gotoAndPlay(2); が実行されるはずですが、
onClipEvent (enterFrame) 内で実行され「続ける」ので、
第2フレームから動かないことになります。

で、fFukidashi が false になった瞬間から、
実行され「続ける」状態から解放されるために、
最後に実行された gotoAndPlay(2); によって、
第2フレーム以降に進むことができるようになります。

つまり、fFukidashi とは無関係に、次のようにしたとしても、
_root.fukidashi は第2フレームから動かないのではないのでしょうか?

function xFukidashi() {
gotoAndPlay(2);
this._x = _root._xmouse+30;
this._y = _root._ymouse+30;
}
コメントが遅れまして申し訳ありません。

なるほどですね。
_root.fukidashiは1フレーム目がストップで
2フレーム目からアルファ0%からの出現パターンのタイムラインを引いてました。
enterflameの呼び出し毎に2フレームからの再生開始を繰り返していたのが、
今回の勘違いの元だったのですね。

イベントのタイミング、タイムライン上の挙動の
理解が足りなかった模様です。
(今となっては、期せず、ブール裏返しの状態で意図通り動いているのが不気味です)
皆様の的確なご指摘、大変参考になりました。
疑問も解決致し、すっきりいたしました。
コメントいただきました皆様方、
ありがとうございました。
>> 6: うういんぐさん
>(今となっては、期せず、ブール裏返しの状態で意図通り動いているのが不気味です)
特定のフレームにgotoAndPlay()を実行し続けることによって、そのフレームに停止させるという動作結果は、ちょっとすっきりしませんね。あと、フラグを使う必要があるのでしょうか?

意図した動作に合うかどうか定かではありませんが、こんな感じではありませんか(全角スペースでインデントしていますので、コピー&ペーストしただけではエラーになります)。

// _root.bottons.btn5_mc に以下を記述
on (rollOver) {
 // _root.fukidashi.fFukidashi = false;
 _root.fukidashi.xFukidashi(true);
}
on (rollOut) {
 // _root.fukidashi.fFukidashi = true;
 _root.fukidashi.xFukidashi(false);
}

// _root.fukidashi に以下を記述
onClipEvent (load) {
 // fFukidashi = false;
 // function xFukidashi() {
 function xFukidashi(fFukidashi) {
  trace(fFukidashi);
  if (fFukidashi) {
   gotoAndPlay(2);
  } else {
   gotoAndStop(2);
  }
  // this._x = _root._xmouse+30;
  // this._y = _root._ymouse+30;
 }
}
onClipEvent (enterFrame) {
 // xFukidashi();
 // trace(fFukidashi);
 this._x = _root._xmouse+30;
 this._y = _root._ymouse+30;
}
> Fumio様

ご指摘ありがとうございます。
マウスイベントを取得するオブジェクトから
直接関数を呼び出すのですね。
全て書き換えて動かしてtraceしてみましたが、
こちらも意図通りの動きとなりました。

前後しましたが、今回のFumioさんのご指摘の手直しした状態での
ムービークリップの構造図をアップさせていただきます。

なお、今回のベースは他のトピで紹介されていた
「スクロールするボタン2(無限スクロール)」
http://www.condo.fromc.jp/flash/memo/index.html
でした。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Flash Action Script 更新情報

Flash Action Scriptのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。