質問ページ4 / 210


質問ページ4 / 210

質問ページ4/210

概要イベントハンドラメソッド
投稿者Parafla Quality
状態
カテゴリーActionScript
投稿日2013-08-27 (火) 08:13:48
バージョン1.37

質問内容

スプライトaに対して、このスプライト自体にクリップアクションとして、「on ClipEvent?(enterFrame){・・・}」と書くのではなく、 別なフレームにフレームアクションとして「a.onEnterFrame?=function(){・・・・};」と書いて、同じ効果を発揮できると聞きました。 そこで分からないのですが、この後者の場合、「onEnterFrame?」というのはどのタイミングで発揮されるのでしょうか?というのは、このフレームアクションとして、一フレーム使っているわけで、 もし「スプライトaが再生されるタイミング」で実行されるのあれば、ではこのフレームは何もしない一フレームということになってしまいませんか。(その1フレームでは何をしているのでしょうか。)

また、↑が解決すれば解決するかもしれないのですが、このフレームアクションを置く場所が分かりません。 例えば、「このフレームアクション」→「スプライトa」→停止 または、「スプライトa」→「このフレームアクション」→停止 とした場合、「このフレームアクション」自体には一度きりしか通らないハズで、 そうなるとonEnterFrame?のような毎ターン実行されるようなスクリプトがどうしてこの方法で書けるのかいまいち分からないのです。 解答よろしくお願いします。

回答

  • 「a.onEnterFrame??=function(){・・・・};」と書いた場合、スプライトaが存在している間毎フレーム処理します。処理されるタイミングはフレームアクションが設置された瞬間のフレームから実行されます。また、配置する順番は「スプライトa」→「このフレームアクション」→停止 とします。分かりやすく言うと onEnterFrame? はスプライトの onClipEvent?(enterFrame) に処理を登録するための記述だと考えてください。一度登録された処理はスプライトが削除されるまで有効です。 -- 2013-08-27 (火) 10:52:24
  • なるほど。「登録」という言葉、非常にわかりやすいです。ということは、妙な例ですが、「スプライトa」→「スプライトb」(この中に_root.a.onEnterFrame?=・・と書く)→停止としても、OKなわけですね。 -- 2013-08-27 (火) 12:53:38
  • そうです。onEnterFrame? の便利なところは他のスプライトから毎フレームの処理を作成することができたり、 _root.onEnterFrame? 等というように _root にも毎フレームの処理を作成できることです。 -- 2013-08-27 (火) 13:56:04
  • それと一つ注意が、onClipEvent?(enterFrame) が設定されているスプライトに onEnterFrame? で処理を追加すると両方とも毎フレーム実行されますが、onEnterFrame? が設定されているスプライトに後からもう一度別の onEnterFrame? を設定すると、処理は上書きされます。 -- 2013-08-27 (火) 14:03:23
  • なるほどなるほど。上書きされるわけですか。とても分かりやすい解説をどうもありがとうございました。 -- 2013-08-27 (火) 17:26:49
  • a.onEnterFrame?はスプライトaが削除されるまで有効と言っても、対象物が無くなったために何もできなくなるだけで、スプライトaを探し何もしなくてもいいという結論を出す処理は続いてしまいますので必要なくなったら
    delete a.onEnterFrame; 
    とフレームアクションに書きその無駄な処理をストップすることをお勧めします-- 2013-08-28 (水) 14:02:57
  • おお。なるほど。初めて知りました。親切にどうも。 -- 2013-08-28 (水) 16:10:39