メイン 迷える子羊の部屋【初心者専用】 for文の中のイベントハンドラメソッド | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
TJFORD | Åê¹ÆNo.35399 投稿日時: 2007-10-3 0:55 |
半人前 居住地: Tokyo 投稿: 42
使用環境:
:Flash CS3 |
for文の中のイベントハンドラメソッド こちらのサイトの過去の投稿を拝見して勉強させていただいています。
「複数の画像を並べて表示」 http://www.flash-jp.com/modules/newbb/viewtopic.php?topic_id=6628&forum=8&viewmode=flat&order=ASC&start=10 上記の投稿にて、以下のようなスクリプトがありました。 ?????????????????????????????? for (var n:Number = 0; n < 3; n++) { var _mc:MovieClip = mcList[n]; loader.loadClip(imgList[n].nodeValue, _mc.holder); _mc.onRelease = function():Void { getURL(urlList[this.id]); }; } ?????????????????????????????? ここで疑問が生まれたのですが、for文の中のイベントハンドラメソッドなどはどこか(タイムライン?)に保存され、イベントが起こった時にそれが呼び出されるのでしょうか?押された時点でfor文のなかのfunctionが呼び出されるとターゲットは_mcになるはずでその_mcはfor文の中では上書きされているわけで。どこかに保存されているからうまく動いているのかなと予想したのですが実際はどのような処理がされているのでしょうか? ?????????????????????????????? <予想> 下記のようなイベントハンドラメソッドがどこかに記憶されている? mcList[0].onRelease = function():Void {getURL(urlList[this.id]);}; mcList[1].onRelease = function():Void {getURL(urlList[this.id]);}; mcList[2].onRelease = function():Void {getURL(urlList[this.id]);}; ?????????????????????????????? わかりにくい文で申し訳ありませんがよろしくお願いいたします。 |
ひろゆき | Åê¹ÆNo.35400 投稿日時: 2007-10-3 1:02 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CC Safari 6.1 |
Re: for文の中のイベントハンドラメソッド onRelease は、MovieClip に設定されます。
# Button にも設定されますが、ここではMovieClipだけに限定しておきます。 _root 上に、ムービークリップ(インスタンス名: mc)が配置されており、 _root 第1フレームに
「mcがクリックされたときに、function()内の動作を実行する」ように予約しておくわけです。
|
TJFORD | Åê¹ÆNo.35401 投稿日時: 2007-10-3 1:11 |
半人前 居住地: Tokyo 投稿: 42
使用環境:
:Flash CS3 |
Re: for文の中のイベントハンドラメソッド ひろゆきさん
早速のご返信ありがとうございます。 onReleaseがプロパティのように各ムービークリップに登録されるイメージでしょうか? |
ひろゆき | Åê¹ÆNo.35402 投稿日時: 2007-10-3 1:15 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CC Safari 6.1 |
Re: for文の中のイベントハンドラメソッド 次に、
_root 上に、ムービークリップ(インスタンス名: mc1, mc2, mc3) が 配置されている場合を考えてみましょう。
しかし、これでは、ムービークリップの数が増えた場合、面倒ですから、
また、次のように記述することもできます。
問題の「複数の画像を並べて表示」では、 配列の mcList に、ムービークリップ・インスタンス(への参照)を格納して、 それを for文で回しながら、取り出していることになります。
いずれにせよ、イベントハンドラメソッドは、 動作の予約をムービークリップ・インスタンスに対して行っているということですね。
|
野中文雄 | Åê¹ÆNo.35403 投稿日時: 2007-10-3 1:20 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: for文の中のイベントハンドラメソッド イベントハンドラメソッドを設定した各MovieClipインスタンス(タイムライン)に「保存され」ます。
たとえば、以下の関数xTest()では、ローカル変数_mcは、function本体の処理が済めばクリアされます。それでも、MovieClipインスタンスmy_mcに、イベントハンドラメソッドはメモリされています。
引用: TJFORDさんは書きました: MovieClip.onReleaseイベントハンドラメソッドは、プロパティと考えても誤りではありません。 参考: 拙著『モーショングラフィックスで学ぶActionScript』4.8「メソッドもプロパティ」(PDF) |
TJFORD | Åê¹ÆNo.35404 投稿日時: 2007-10-3 1:35 |
半人前 居住地: Tokyo 投稿: 42
使用環境:
:Flash CS3 |
Re: for文の中のイベントハンドラメソッド ひろゆきさん 野中さん
ご返信ありがとうございます。 「保存されている」「予約されている」という感覚がなんとなくわかりました ありがとうございます。 まだまだプログラミングというものをはじめて3週間足らずの人間です。今後もこちらのサイトで勉強していきたいと思います。 ありがとうございました。 |
ひろゆき | Åê¹ÆNo.35405 投稿日時: 2007-10-3 1:35 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CC Safari 6.1 |
Re: for文の中のイベントハンドラメソッド 例えば、_root 上に、ムービークリップ(インスタンス名: mc) を配置。
_root 第1フレームに
ムービープレビューで、[デバッグ]-[変数のリストアップ]をすると、
野中さんが書かれている、イベントハンドラメソッドがプロパティとも考えられるというのは、 これだと思います。 #ちがってたら、ごめんなさい。 また、次のようなテストをすることもできます。 _root には何も配置せず。 _root 第1フレームに
次に、以下のように記述。
そのため、mc.onRelease もクリアされます。 なので、同じインスタンス名の mc を生成しても、 もはやクリックできません。
|
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |