サイトトップ

Director Flash 書籍 業務内容 プロフィール

Macromedia Flash非公式テクニカルノート

updateAfterEvent()グローバル関数

ID: FN0402004 Product: Flash

Platform: All
Version: 5.0 and above

シンタックス
updateAfterEvent()

引数
なし[*1]。

[*1] Flash 5の「ActionScript辞書」に、引数としてイベントを指定できるとされていたのは誤りです。

戻り値
なし。

説明
関数。フレームレートの設定にかかわらず、画面の描画を更新します。ただし、以下のイベントを指定したハンドラとsetInterval()関数から呼出した場合のみ有効です。その他のハンドラや関数内からの呼出しは、無視されます[*2][*3]。

onClipEvent()イベントハンドラアクション

MovieClipイベントハンドラメソッド setInterval()関数
mouseMove MovieClip.onMouseMove

mouseDown MovieClip.onMouseDown
mouseUp MovieClip.onMouseUp
keyDown MovieClip.onKeyDown
keyUp MovieClip.onKeyUp

[*2] MouseやKeyクラスのイベントで呼出した場合も、効果がありません。また、上記のハンドラや関数内であっても、forwhileループ処理内から実行したときは、画面の更新が行われません。

[*3] onClipEvent (enterFrame)ハンドラアクションやMovieClip.onEnterFrameメソッド内でupdateAfterEvent()関数を呼出すことは、意味がありません。関数の呼出し自体は無視され、関数の存在にかかわらずハンドラの処理後は自動的に描画が更新されるからです。

「念のため」描画更新の処理を記述しておくという人がいます。しかし、動作しない処理を記述しても、何の「念」にもなりません。もっとも、自分しか見ないスクリプトであれば、とくに害もありません。けれど、他の人に見せるコードでは、意味のない処理に意味があるかのような誤解を与える点で、不適切でしょう。

他言語で描画の処理は明示的に行う必要のあることを、引合いに出す人もいます。そのような言語があることは確かです。しかし、たとえばMacromdia Directorの描画更新コマンド(updateStage)は、本当に(たとえばループ処理中でも)強制的に画面を書替えます。その安易な使用は、ときとしてフレームレートに沿ったアニメーションの動作を変えてしまうこともあります(大重美幸『Director MX Lingoスーパーマニュアル』p.197参照)。言語によって実装の異なる描画更新処理に、他言語の流儀をもちこむべきではないでしょう(なお、後述[*4]参照)。


以下のフレームアクションをMovieClipに設定すると、インスタンスはマウスポインタに追随します。フレームレートが低くても、滑らかなアニメーションが行われます[*4]。

// MovieClip: マウスポインタに追随させるインスタンス
// フレームアクション
this.onMouseMove = function() {
  this._x += this._xmouse;
  this._y += this._ymouse;
  updateAfterEvent();
};

[*4] この結果をとらえて、updateAfterEvent()関数を(もちろん効果のある処理の中で)積極的に使うことが、スムーズなアニメーションにつながると理解されることがあります。しかし、本来のフレームごとの描画更新に追加して、画面の書替えが行われているという事実を認識しておかなければなりません。

描画更新は、コンピュータにとって負担の軽い処理とはいえません。updateAfterEvent()関数を多用すると、本来のフレームアニメーションや、他の処理に影響を及ぼす可能性もあるのです。

Player
Flash Player 5.0以降。

参考
Flash MX 2004 ActionScript Dictionary: updateAfterEvent()

_____

作成者: 野中文雄
作成日: 2004年2月24日


Copyright © 2001-2004 Fumio Nonaka.  All rights reserved.