メイン ActionScript 3.0 特設会議室
リンゲージしたMCのタイムライン上にあるMCの制御 | 投稿するにはまず登録を |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
| 投稿者 | スレッド |
|---|---|
| undisco | Åê¹ÆNo.36644 投稿日時: 2007-12-5 22:54 |
新米 ![]() ![]() 居住地: 投稿: 7
使用環境:
Mac OSX 10.4.10 Flash CS3 |
リンゲージしたMCのタイムライン上にあるMCの制御 初めての投稿なので上手く伝えられるか心配ですが、宜しくお願いします。
親ムービークリップのフレームをコントロールし、 そのフレームにある子ムービークリップのもつフレームの画像を任意に表示できるような物を作ろうと思っています。 インスタンス名「mc1」~「mc5」のムービークリップをタイムラインの1~5フレームに配置した、親となる「MainMC」があり、 「mc1」~「mc5」もそれぞれ5フレームずつのタイムラインを持ち、各フレームに違う画像が入っています。 MainMCをリンゲージし、ドキュメントクラスに設定したクラスが下記です。 package { import flash.display.Sprite; import flash.events.MouseEvent; public class ChildMC extends Sprite{ private var mc:MainMC; private var mcNum:uint; public function ChildMC(){ mc = new MainMC(); this.addChild(mc); mc.x = stage.stageWidth/2; mc.y = stage.stageHeight/2; mc.gotoAndStop(1); mc.mc1.gotoAndStop(1); mc.addEventListener(MouseEvent.MOUSE_DOWN,mDown); } private function mDown(Event:MouseEvent):void { mc.gotoAndStop(2); mc.mc2.gotoAndStop(2); } } } これを実行し、MOUSE_DOWNすると、親のmcは2フレームに移動しますが、 mc.mc2.gotoAndStop(2);は効かず、下記のようにエラーが出力されます。 TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。 at ChildMC/::mDown() この様な場合はどのような解決策があるのでしょうか? 制作環境は、MacOS 10.4 FlashCS3 です。 初心者すぎてそもそも分かっていない事が多いのですがアプローチなどご教授いただければと思います。 宜しくお願いします。 |
| ニノミヤ カズノリ | Åê¹ÆNo.36645 投稿日時: 2007-12-5 23:36 |
職人 ![]() ![]() 居住地: 東京 投稿: 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: リンゲージしたMCのタイムライン上にあるMCの制御 詳しく書いている時間が無い為、エラーの原因だけ。
引用: undiscoさんは書きました: mc.mc2.gotoAndStopメソッドを実行するとエラーが起きてしまう原因は、mc.gotoAndStopメソッドが実行しきらない内にmc2オブジェクトを参照してしまっているからだと思います。 マウスダウン2回目以降はフレームの移動が完了している為、エラーが生じないのではないでしょうか。 問題と関係ないお話ですが、 ドキュメントクラスにSpriteクラスを継承した物をあてるのは、 Flashにおいてはお勧めしません。 なぜなら、フレームにスクリプトの記述が出来なくなってしまうからです。 |
| 野中文雄 | Åê¹ÆNo.36646 投稿日時: 2007-12-6 0:23 |
ちょんまげら ![]() ![]() 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: リンゲージしたMCのタイムライン上にあるMCの制御 以下のご説明は、「『mc1』~『mc5』のムービークリップをタイムラインの」それぞれ「1~5フレームに配置した」、つまりmc1を第1フレーム、mc2を第2フレームに置いたということですね。
引用: undiscoさんは書きました: まず、問題を単純化しましょう。引用のスクリプトの問題を再現するためには、mc3?mc5は不要だと思われます。スクリプトを整理すれば、mc1も要らないでしょう。 MovieClip.gotoAndStop()メソッドを実行した直後では、まだ移動先フレームのインスタンスは初期化されていないことが原因と考えられます。 引用: これを実行し、MOUSE_DOWNすると、親のmcは2フレームに移動しますが、 スクリプティングのデザインとして、タイムラインを利用されるのなら、以下のスクリプトをインスタンスmc(クラスMainMC)の第2フレームに直接記述されればよいように思われます。 スクリプトで集中的に制御する道をとるなら、mc1やmc2も動的に生成して、mcに追加したり削除したりする方が端的です。あるいは、すべてmcの第1フレームに配置したうえで、表示/非表示を切替えるという方法も考えられます。 今のムービー構成が変えられないということでしたら、一応対処方法はないではありません。ただ、汎用性・拡張性がある設計とはいえないでしょう。 最後に、クラス名を変数名に使うのは、絶対にやめましょう。理由は、上記スクリプトで、メソッドmDown()の引数名を元に戻してみればおわかりになるばずです。 |
| undisco | Åê¹ÆNo.36654 投稿日時: 2007-12-6 13:33 |
新米 ![]() ![]() 居住地: 投稿: 7
使用環境:
Mac OSX 10.4.10 Flash CS3 |
Re: リンゲージしたMCのタイムライン上にあるMCの制御 ご教授有り難うございます。
MainMCの1フレーム目にmc1~5を配置し、表示/非表示にする事で一応の解決はしました。 引用: 野中文雄さんは書きました: ご指摘の通り、最終的にはmc1やmc2も動的に生成して制御をしたいと考えています。 AS3の勉強のためにAS2で制作した物を移植していたで、フレームに依存した形を取っていましたが、 今後改良して行きたいと思います。 引用: ニノミヤ カズノリさんは書きました: ヒントありがとうございます。 下記の投稿が参考になりました。 子MovieClipのロードチェックについて 引用: 野中文雄さんは書きました: private function mDown(Event:MouseEvent):void { このように表記する物なのだと思ってました。 考えて見ればおかしいですね。どこで勘違いしてしまったんだか。 以後気をつけます。 |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
| 投稿するにはまず登録を | |



ログイン




CS4
.4.11,
XP Pro(sp3)



