編集部ピックアップ

ゴルフお悩み相談箱
ゴルフお悩み相談箱

コースでのナイスプレーには正しい知識と練習が必須!飛ばない、曲がる、ゴルフの悩みを解決

気になるキーワード

検索語キーワードランキング

1位:
up
2位:
up
3位:
keep

PR

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

例: 紅葉 行楽

検索オプション 質問する

質問

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

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

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

以上になります。よろしくお願いします。
質問投稿日時:06/09/24 01:26
質問番号:2427415
この質問に対する回答は締め切られました。
最新から表示回答順に表示

回答

 

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

そういう単純なことでは,
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 系 は,アニメーションと同期させて,毎時毎時同じ処理をする場合に使う物です。
種類:回答
どんな人:経験者
自信:参考意見
回答日時:06/09/24 06:45
回答番号:No.2
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

 

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

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

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

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

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

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

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

enterFrameは1つの記述で、フレームレートに合わせてアクションを常時実行させたい場合に使うものです
種類:回答
どんな人:一般人
自信:参考意見
回答日時:06/09/24 05:19
回答番号:No.1
この回答へのお礼この回答にお礼をつける(質問者のみ)
最新から表示回答順に表示

この質問に関連するQ&A

[PR] お役立ち情報