こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

onClipEvent(enterFrame)よりもフレームに書いたほうが良い?

最近Flashでfunctionの使い方を勉強しています。
そこで思ったのですが、例えばあるキーが押されたときに動作を行なわせたい場合。ムービークリップにonClipEvent(enterFrame)で記述する方法とフレームにfunctionで記述する方法の2通りあります(もしかして他にも方法あったりします?)。

素人考えでは、例えばonClipEvent(enterFrame)にtrace文を書いた場合、ずっとtrace処理が行なわれますが、フレームに書いた場合はそのフレームが読み込まれた瞬間のみtrace処理が行なわれます。一見onClipEvent(load)のようですが読み込み後、たとえフレーム移動がそこでstopになったとしても、イベントハンドラによって処理を行なわせることは可能です。そう考えると、処理の軽さ的にはフレームに記述する方法の方が優れているのでしょうか?

ムービークリップにonClipEvent(enterFrame)で記述する場合とフレームにfunctionで記述する場合、両者の長所・短所も合わせて紹介していただけると助かります。

以上になります。よろしくお願いします。

投稿日時 - 2006-09-24 01:26:15

QNo.2427415

暇なときに回答ください

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

>> 例えばあるキーが押されたときに動作を行なわせたい場合。
        ~
>> (もしかして他にも方法あったりします?)。

そういう単純なことでは,
onClipEvent(enterFrame) や MovieClip.onEnterFrame はなるべく避けた方が良いです。
enterFrame 系は,1フレーム進む時間ごとに毎回実行されます。
毎回毎回実行されるのですから,実行命令の無駄で,CPUに負担をかけます。
キーは普通めったに押されることはありません。
enterFrame 系は簡単で良いですが,
これを使いすぎるとだんだん動作が重くなります。
また enterFrame 系は,MovieClipクラス のイベントハンドラです。


あるキーが押されたときの,
"あるキー" として,特定のキーをすでに決めてある場合は,
ボタンシンボルのインスタンスを作成しておいて
そのボタンに,

 on (keyPress "a") { }

を書くか,また,
"あるキー" として,特定のキーをすでに決めていない場合,
つまり,本当に「あるキーが押されたとき」を監視するのでしたら,
Buttonクラスの,

 Button.onKeyDown = function() {}
  や
 Button.onKeyUp = function() {}

を使う方が良いです。

Flashドキュメンテーション
「onKeyUp (Button.onKeyUp ハンドラ)」
http://livedocs.macromedia.com/flash/8_jp/main/00001999.html


しかし,
キーイベントの監視に,わざわざボタンを作成するのも変な場合もあります。
そんなときは,Keyクラス の addListener メソッドで,

Listener.onKeyDown = function () {}

を使って,
リスナーオブジェクトに Keyイベント を監視させる方法を使います。

Flashドキュメンテーション
addListener (Key.addListener メソッド)
http://livedocs.macromedia.com/flash/8_jp/main/00002295.html

-------------------------------------------------------

>> 例えばonClipEvent(enterFrame)にtrace文を書いた場合、
>> ずっとtrace処理が行なわれますが、
>> フレームに書いた場合はそのフレームが読み込まれた
>> 瞬間のみtrace処理が行なわれます。

はて???
どういう状況でしょう?
普通はそんなことはありませんよ。

_root.onEnterFrame = function(){
trace("traceしてます。");
}

ずっと trace し続けます。

>> そう考えると、処理の軽さ的にはフレームに
>> 記述する方法の方が優れているのでしょうか?

同じでしょう。
凝った MC(ムービークリップ) を作成したのでしたら,
その分メモリを消費するので,わざわざムービークリップを作らなくても良いかもしれない,

Movieclip.onEnterFrame = function(){}

の方が若干良いとは思いますが,
そのムービークリップが必要である場合は,どちらを使っても同じだと思います。

-------------------------------------

まあ,何にしても enterFrame 系 は,アニメーションと同期させて,毎時毎時同じ処理をする場合に使う物です。

投稿日時 - 2006-09-24 06:45:34

ANo.1

そもそもonClipEvent(enterFrame)とフレームに記述するfunctionを比べる、ということ自体が両者に関する間違った解釈をしていると思われます

下記のような例だとすると、

■targetMCに記述
onClipEvent(enterFrame){
//アクション
}

■targetMCの上階層フレームに記述
targetMC.onEnterFrame = function(){
//アクション
}

両者は同じ意味合いなので、前者は、後者のonEnterFrameイベントハンドラに使用するfunctionを定義することをonClipEvent(enterFrame)により実装しているという感じになります

フレームに記述した場合はそのフレームが読み込まれた瞬間にしかアクションを実行しないので、たとえstop();と記述してhoge();のような形でfunctionを呼び出したとしても、そのフレームで止まってる以上、何度もキー押下の判定をしたい場合取得ができません

そのフレームのみで押下判定を取得したいならそれで構いません

enterFrameは1つの記述で、フレームレートに合わせてアクションを常時実行させたい場合に使うものです

投稿日時 - 2006-09-24 05:19:48

あなたにオススメの質問