メイン 迷える子羊の部屋【初心者専用】
動的MCの中に動的MCを配置したい | 投稿するにはまず登録を |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
| 投稿者 | スレッド |
|---|---|
| mittings | Åê¹ÆNo.43504 投稿日時: 2009-9-26 0:12 |
新米 ![]() ![]() 居住地: 投稿: 4
使用環境:
WinXP,Flash CS4 |
動的MCの中に動的MCを配置したい はじめて質問させていただきます。
動的に作成したムービークリップの中に、別のムービークリップを動的に入れるという処理を考えているのですが、上手くいきません。 ■プログラムのイメージ 牛の柵や豚の柵を動的に配置(場所が変わったり増えたり減ったり)し、柵の中の牛や豚の数も動的に変化させる。 +--牛の柵---+ | | | 牛 牛 | | | +------------+ +--豚の柵---+ | | | 豚 豚 | | 豚 | +------------+ ■問題点 柵を静的に作成しておき、その中に動的に動物を配置することはできます。 しかし動的に作った柵の場合うまく動いてくれません。 ちなみに静的な柵を配置しておく場合のプログラムは、UsiSaku(牛の柵)というムービークリップをaddChildで追加しておいて、n頭のUsiClip(牛)を配置するものです↓ for(var i:int=0; i<n; i++){ var animal_name = "usi"+i; var Animal:MovieClip = new UsiClip(); UsiSaku.addChildAt(Animal,0); Animal.name = animal_name; UsiSaku.getChildByName(animal_name).x = i*100; } UsiSakuもgetChildByNameで処理してみたり、色々とやってはみたのですが、動いてくれませんでした。 ■動作環境 OS:WindowsXP Flash:CS4 AS3 よろしくお願いいたします。 |
| ひろゆき | Åê¹ÆNo.43506 投稿日時: 2009-9-26 0:25 |
ちょんまげら ![]() ![]() 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CCSafari 6.1 |
Re: 動的MCの中に動的MCを配置したい 「アカウント編集」で、編集環境は書いておきましょう。
「プロフィール・使用環境記入のお願い」 #その他の欄に記入すれば、使用環境として表示されるはずです。 単に「動かない」というのであっても、 「表示されない」のか、 「表示されるが、思うような動きをしない」のか、 「コンパイルエラーが出る」のか、 何がどう動かないのか、説明されないと、 第三者には分かりません。 クラスは大文字、インスタンスは小文字で始めましょう。
|
| mittings | Åê¹ÆNo.43507 投稿日時: 2009-9-26 0:43 |
新米 ![]() ![]() 居住地: 投稿: 4
使用環境:
WinXP,Flash CS4 |
Re: 動的MCの中に動的MCを配置したい >>mayorさん
ご回答ありがとうございます。 至らぬ点が多々あり申し訳ありません。 「うまくいかない」というのは、エラーが起きて動作がとまってしまうということです。 また、UsiSaku(柵)の「動的」の意味をちゃんとお伝えできていませんでした。 mayorさんの例のように、UsiSakuを var usiSaku:UsiSaku = new UsiSaku(); addChild(usiSaku); のようにすればできることは実証済みです。 今回考えているのは「柵の種類がたくさんあり、追加されたり削除されたりする」ものです。 柵の名前を入れるとその柵を動的に作成するような関数をつくり管理したいと思っています。 function SakuAdd(saku_name):void{ // ここでUsiSakuを作成、配置 } そうすると、作られた柵の中にMCを入れようとすると、安易に usiSaku.addChild(animal); ではエラーになってしまいます。 うまく説明できないのですが、なんとなくお分かりいただけますでしょうか? |
| ひろゆき | Åê¹ÆNo.43508 投稿日時: 2009-9-26 0:46 |
ちょんまげら ![]() ![]() 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CCSafari 6.1 |
Re: 動的MCの中に動的MCを配置したい 引用:
mittingsさんは書きました: 上手く説明する必要はありません。 端折らず、説明してください。 少なくとも、現状でのスクリプトを中途半端な省略をせずに記載すべきです。 そのうえで、どのようになさりたいのかを説明した方がよいでしょう。 また「エラー」と一言で片づけてしまうのではなく、 具体的に、どのようなエラーが出ているのか、明確にすべきです。
|
| mittings | Åê¹ÆNo.43510 投稿日時: 2009-9-26 1:24 |
新米 ![]() ![]() 居住地: 投稿: 4
使用環境:
WinXP,Flash CS4 |
Re: 動的MCの中に動的MCを配置したい >>mayorさん
ソースは以下となります。 // UsiSaku 柵クラス // Usi 牛クラス var saku_array:Array = new Array("Usi","Buta","Yagi","Hitsuzi"); SakuAdd(saku_array[0]); // 柵を配置 AnimalAdd(saku_array[0],1); // 動物を配置 function SakuAdd( saku_name ):void{ var sakuClass:Class = Class(getDefinitionByName(saku_name+"Saku")); var sakuInstance:MovieClip = new sakuClass(); addChild(sakuInstance); sakuInstance.name = saku_name+"Saku"; } function AnimalAdd( animal_name, animal_num ):void{ for( var i:int=0; i<animal_num; i++ ){ var animalClass:Class = Class(getDefinitionByName(animal_name)); var animalInstance:MovieClip = new animalClass(); getDefinitionByName(animal_name+"Saku").addChild(animalInstance); animalInstance.name = animal_name + i; } } 柵をSakuAdd()内で作成しているので、AnimalAdd()でエラーになるのでしょうか。 エラーは以下となります。 Attemping to launch and connect to Player using URL C:\***\test.swf [SWF] C:\***\test.swf - 45795 bytes after decompression TypeError: Error #1006: addChild は関数ではありません。 at test_fla::MainTimeline/AnimalAdd()[test_fla.MainTimeline::frame1:492] at test_fla::MainTimeline/frame1()[test_fla.MainTimeline::frame1:479] よろしくお願いいたします。 |
| 野中文雄 | Åê¹ÆNo.43511 投稿日時: 2009-9-26 1:56 |
ちょんまげら ![]() ![]() 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: 動的MCの中に動的MCを配置したい スクリプトは、もっと単純化できるはずです。→【問題を単純化(シンプルに)しない】
つぎの2行のスクリプトで、同じエラーが再現されます。クラスとインスタンスを区別できていないことが原因でしょう。 引用: mittingsさんは書きました: |
| 野中文雄 | Åê¹ÆNo.43513 投稿日時: 2009-9-26 20:55 |
ちょんまげら ![]() ![]() 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: 動的MCの中に動的MCを配置したい ご質問のスクリプトをもう1度見直してみたところ、「クラスとインスタンスを区別できていない」といより、「インスタンスとインスタンス名」の扱いについて混乱されているといった方がよさそうです。
結論として、インスタンスをインスタンス名で扱うのは、お止めになることをお勧めします。対処法のひとつとしては、関数SakuAdd()からインスタンスの参照を受取り、AnimalAdd()の引数に渡してやることでしょう。 参考: F-site「MovieClipインスタンスとインスタンス名」 |
| mittings | Åê¹ÆNo.43516 投稿日時: 2009-9-28 21:23 |
新米 ![]() ![]() 居住地: 投稿: 4
使用環境:
WinXP,Flash CS4 |
Re: 動的MCの中に動的MCを配置したい >>Fumioさん
ご回答ありがとうございます。 何分初心者なもので、インスタンスの参照を受け取り、引数に渡すという処理がうまくイメージできません。 しかし試行錯誤の末、初めに書いたスクリプトを動かすことができました。 いくら初心者掲示板とは言え、本当の初心者は書き込んではいけませんね。 >>mayorさん、>>Fumioさん 色々と考えていただき、ありがとうございました。 |
| 野中文雄 | Åê¹ÆNo.43517 投稿日時: 2009-9-28 22:15 |
ちょんまげら ![]() ![]() 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: 動的MCの中に動的MCを配置したい 「初心者」であることは、何の差支えもありません。ご説明のないのが困るということです。
→【初心者なので?】配列を使い、関数を定義され、forループの構文をお書きになれれば、もはや「初心者」ではないと思います。けれど、どれくらいの知識をもたれ、どこまで処理内容を理解し、どこがおわかりにならないのか具体的に投稿いただかないと、回答者は何をどの程度ご説明すればよいのか見当がつきません。ですから、どうしても抽象的・一般的な答えになってしまうのです。 「インスタンスの参照を受け取り、引数に渡す」というのは、たとえばつぎのように関数からインスタンスの参照を返すということです。 引用: mittingsさんは書きました: |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
| 投稿するにはまず登録を | |



ログイン




10.8.5
Flash Professional CS4/CS6/CC

Vista Home Premium (SP1)

→【