メイン コーダーズルーム【スクリプト系】
gotoAndStopでそのフレームのコードが2度実行される | 投稿するにはまず登録を |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
| 投稿者 | スレッド |
|---|---|
| gomomo | Åê¹ÆNo.38892 投稿日時: 2008-5-21 10:16 |
新米 ![]() ![]() 居住地: 東京 投稿: 16
使用環境:
WinXP PRO Flash CS3 |
gotoAndStopでそのフレームのコードが2度実行される こんにちは
いつもお世話になってます。 CS3でスライドショーを作っていてどうも納得のいかない挙動をしたので質問させてください。 メインのタイムラインの1フレームに this.stop(); そして、適当なMovieClipを置きます。(インスタンス名test_mc) で、その置いたMovieClipには1フレーム目に this.stop(); 5フレーム目に trace("test"); この状態でメインタイムラインの1フレーム目 this.stop()の後に test_mc.gotoAndStop(5); で実行するとtestが2回出力されます。 ちなみにtest_mcの5フレーム目にも this.stop(); を書いて test_mc.gotoAndPlay(4); とすると思ったような挙動なのですが、厳密に言うと1フレーム時間が経過してるので、即時実行ではないですよね? なぜこのような挙動になるのでしょうか? お願いいたします。
|
| ひろゆき | Åê¹ÆNo.38894 投稿日時: 2008-5-21 11:06 |
ちょんまげら ![]() ![]() 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CCSafari 6.1 |
Re: gotoAndStopでそのフレームのコードが2度実行される 引用:
gomomoさんは書きました: 「思ったような挙動」とは、どのような挙動なのか、 第三者にも分かるように説明された方が良いように思いますが。
|
| とんび | Åê¹ÆNo.38896 投稿日時: 2008-5-21 13:44 |
Bak@Fla大巨匠 ![]() ![]() 居住地: 佐賀県 杵島郡 投稿: 275
使用環境:
MX CS3:Flash CS6:CS6 .7.5 |
Re: gotoAndStopでそのフレームのコードが2度実行される ActionScript3.0ウチの環境でも起きます。メインタイムラインのstop()はなくても2回です。 ActionScript2.0だと同じスクリプトでも実行は1回ですね。それに、ステージに置いたムービークリップの最初のフレームのstop()を外すとこれまた1回になります。 …バグ?
|
| ひろゆき | Åê¹ÆNo.38898 投稿日時: 2008-5-21 13:58 |
ちょんまげら ![]() ![]() 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CCSafari 6.1 |
Re: gotoAndStopでそのフレームのコードが2度実行される こういうことですか?
AS2.0書き出し AS2.0書き出し AS3.0書き出し AS3.0書き出し AS3.0書き出し
|
| gomomo | Åê¹ÆNo.38900 投稿日時: 2008-5-21 16:50 |
新米 ![]() ![]() 居住地: 東京 投稿: 16
使用環境:
WinXP PRO Flash CS3 |
Re: gotoAndStopでそのフレームのコードが2度実行される レスありがとうございます。 試したところひろゆきさんの一番下の AS3.0書き出し は2回表示されました。 AC3ではgotoAndStopで、そのフレームのスクリプトが2回実行されるようです。 とんびさんの言うようにAC2で書き出せば一回しか表示されません。 あと、 AS3.0書き出し は一回ですが、最初の書き込みで書いたとおりこれだと1フレーム分遅れてしまいます。
|
| ニノミヤ カズノリ | Åê¹ÆNo.38903 投稿日時: 2008-5-21 18:05 |
職人 ![]() ![]() 居住地: 東京 投稿: 430
使用環境:
CS4 .4.11, .5.7 XP Pro(sp3)Flash Player 10,0,22,87, AIR 1.5.1, IE 5.5 & 6 & 7 & 8, Firefox 2.0.0.20 & 3.0.11 & 3.5, Opera 9.64, Safari 4, Google Chrome 2.0.172.31, Netscape 7.1 |
Re: gotoAndStopでそのフレームのコードが2度実行される 上記コードの場合、AS3.0 では test_mc の第1フレームのスクリプトは実行されないはずです。 なぜなら親のフレームスクリプトによって test_mc は第1フレームのスクリプトを実行する前に移動してしまっているからです。 この時点で AS2.0 との挙動に違いがあります。 以下勝手な憶測ですが、MovieClip は登場時、 必ず現在居るフレームのスクリプトを一回は実行するのではないでしょうか。 (それが例え親オブジェクトにより stop をかけられていても) 本来は第1フレームのスクリプトを実行するはずが、今回の場合その処理を行う前に 5フレーム目に移動 ↓ 5フレーム目のスクリプト実行 ↓※ 前後しているかもしれませんが 初回行動(現在のフレーム、つまり5フレーム目のスクリプト実行) と言う順序で2回同じ処理をしていると考えます。 (AS2.0 では移動前に初回行動するので2回処理を行わない) |
| gomomo | Åê¹ÆNo.38906 投稿日時: 2008-5-22 0:05 |
新米 ![]() ![]() 居住地: 東京 投稿: 16
使用環境:
WinXP PRO Flash CS3 |
Re: gotoAndStopでそのフレームのコードが2度実行される レスありがとうございます
すいません。ちょっとわかりづらいのですが つまりgotoAndStopは gotoで一回実行 stopで一回実行 って感じでしょうか? まさに、挙動はその通りだと思います。 実際、andというキーワードが気になって、ヘルプでgotoというメソッドが増えたのかと思って探しました。 バグっぽいとも思ったのですが、こんなわかりやすいものはとっくに修正されてる気もしますので、気づいてて仕様としてそうしてるような気もします。 反面、この挙動の方が好ましい局面はないような気もするのですがどうなんでしょうか?
|
| ニノミヤ カズノリ | Åê¹ÆNo.38907 投稿日時: 2008-5-22 2:20 |
職人 ![]() ![]() 居住地: 東京 投稿: 430
使用環境:
CS4 .4.11, .5.7 XP Pro(sp3)Flash Player 10,0,22,87, AIR 1.5.1, IE 5.5 & 6 & 7 & 8, Firefox 2.0.0.20 & 3.0.11 & 3.5, Opera 9.64, Safari 4, Google Chrome 2.0.172.31, Netscape 7.1 |
Re: gotoAndStopでそのフレームのコードが2度実行される 分かりやすく説明できるのか不安ですが、私の考えを細かく説明してみます。
まず最初に AS2.0 と AS3.0 で1フレーム目から処理が違うと言うのはお分かり頂けたでしょうか? 例えば下記を実行したらその違いが分かります。 ルート 第1フレーム test_mc 第1フレーム test_mc 第5フレーム すると結果はこうなるはずです。 AS2.0 AS3.0 AS3.0 の場合、1フレーム目の処理が実行されていません。 この処理の違いを頭の片隅に入れておいてください。 次に下記について説明します。 ルート ---------------------- フレーム数 | 1 | 2 | ---------------------- レイヤー | ○ | ● | ---------------------- スクリプト | ○ | a | ---------------------- ○=空のフレーム ●=MCがあるフレーム(仮にこのMCを上でも使った test_mc とします) a=フレームスクリプト test_mc 第1フレーム a(フレームスクリプト) 例えば上の様にタイムラインの2フレーム目に MovieClip(test_mc) を配したとします。 この場合、2フレーム目に移動すると自動的に test_mc は再生を開始します。 再生と言う事は自動的に再生ヘッドにあるフレームスクリプトも実行される訳です。 これは test_mc に stop を掛けていても必ず一回は実行されます。 (この一回目の処理を適当に"初回行動"と名前を付けておきます) 結果(一回処理した後、ストップ) ここで冒頭で述べた処理の違いが出てきます。 AS3.0 での結果を見る限り、 初回行動をする前に gotoAndStop によって再生ヘッドが移動しているのではないでしょうか。 つまり処理としては下記の様な流れになります。 AS3.0 gotoAndStop により5フレーム目に移動 ↓ 5フレーム目のスクリプトを実行 ↓ ※ 前後しているかもしれませんが 初回行動:再生ヘッド(5フレーム目)のスクリプトを実行 初回行動は必ず実行される訳ですから、 gotoAndStop によって5フレーム目で処理を止めようとしても意味がありません。 その結果、2回同じ処理を繰り返すのだと予想します。 本来であれば AS2.0 の動きが望ましいところです。 AS2.0 初回行動:再生ヘッド(1フレーム目)のスクリプトを実行 ↓ gotoAndStop により5フレーム目に移動 ↓ 5フレーム目のスクリプトを実行 防ぐ方法として ルート ---------------------- フレーム数 | 1 | 2 | ---------------------- レイヤー | ● ● | ---------------------- スクリプト | ○ | a | ---------------------- ○=空のフレーム ●=MCがあるフレーム(仮にこのMCを上でも使った test_mc とします) a=フレームスクリプト フレームスクリプトで test_mc を操作する1フレーム前に既に配置しておきます。 配置の仕方はどんな形でも良いです。見えなくても良いでしょう。 MovieClip に初回行動させてあげる余裕を持たせてあげれば 2回同じ処理をする不具合はなくなると思います。 引用: gomomoさんは書きました: そう言うわけではありません。 これだと常に2回処理を実行する事になってしまいます。 引用: gomomoさんは書きました: 私自身はイレギュラー、バグだと思っています。 以上です。 私の考えが伝わったでしょうか。 では長々と失礼致しました。 |
| gomomo | Åê¹ÆNo.38910 投稿日時: 2008-5-22 14:33 |
新米 ![]() ![]() 居住地: 東京 投稿: 16
使用環境:
WinXP PRO Flash CS3 |
Re: gotoAndStopでそのフレームのコードが2度実行される ありがとうございます。
たぶん?わかりました! インスタンス化>初回行動>外部からのフレームの移動 であるべきところが インスタンス化>外部からのフレームの移動>初回行動 になってるって感じでしょうか? 提示していただいた 引用:
か、 フレームを使わないでスクリプトのみでやるか、 1フレーム分の時差に目をつむるかしかなさそうですね。 ちょっと実験をしてみました。 引用:
これで実行するとAC2では 1 2 3 4 5 AC3では 5 5 5 5 5 になります。 gotoAndStopのヘルプを見ると 引用:
となっています。 上のバグ?とヘルプの説明を合わせると 1 2 3 4 5 5 となりそうなもんですが・・・ 微妙に一貫性がないというか、やっぱりバグっぽいですね。 どうもありがとうございました。
|
| ニノミヤ カズノリ | Åê¹ÆNo.38911 投稿日時: 2008-5-22 14:50 |
職人 ![]() ![]() 居住地: 東京 投稿: 430
使用環境:
CS4 .4.11, .5.7 XP Pro(sp3)Flash Player 10,0,22,87, AIR 1.5.1, IE 5.5 & 6 & 7 & 8, Firefox 2.0.0.20 & 3.0.11 & 3.5, Opera 9.64, Safari 4, Google Chrome 2.0.172.31, Netscape 7.1 |
Re: gotoAndStopでそのフレームのコードが2度実行される 引用:
gomomoさんは書きました: はい、その通りです。 2回処理する理由は、内部処理が分かりませんので推測でしか語る事が出来ません。 恐らくこう言う事だろうと私は考えます。 また、親から処理を受けている点がその処理の順序に影響を与えている可能性もあります。 |
| (1) 2 » | |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
| 投稿するにはまず登録を | |



ログイン


GOMOMO

10.8.5
Flash Professional CS4/CS6/CC


MX

XP Pro(sp3)