• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:外部クラスからステージへのaddChild()メソッドの利用について)

外部クラスからステージへのaddChild()メソッドの利用について

このQ&Aのポイント
  • ActionScript3(以下AS3)で記述したスクリプトを外部クラス化したいと考えており、FLAファイル側で外部クラスsample.asクラスをnew sample();で呼び出し、外部クラス内で生成したSpriteをステージに追加する為にaddChild(basebg);と指定するとコンパイルエラーとなり、「1180:未定義である可能性が高いメソッドaddChildの呼び出しです。」と表示されます。
  • 外部クラスにはbasebgに追加するaddChild()メソッドを複数使用していますが、それらはエラーが出ていません。
  • 外部クラスからステージにオブジェクトを追加するにはどのような記述が必要でしょうか?初歩的なミスかもしれませんが、ご教授いただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#1です。 > 何故クラス宣言の後に生成したMovieClipが > ステージに追加されたのかがわからなかったので 書いていらっしゃる意味がよくわかりません。 コンストラクタ関数を実行するときの引数が,この場合 this(MovieClip) であって, その引数を受けてコンストラクタが動作するのですが。 なんだかさっぱりわかりませんね.....。 この場合の this とはあえて言うと root ですよ。 root はそもそも MovieClip です。 別の言い方をすればこの場合の this は SWF のメインのタイムラインです。 SWF のメインのタイムライン は デカイ MovieClip です。 メインのタイムラインは階層も持ちます。タイムラインも持ちます。その他ムービークリップクラスのすべてのプロパティも持ちます。 階層ですからムービークリップその中に内包することができます。 つまりムービークリップです。 ただもっと大きな目で見ると,root は DisplayObject(表示オブジェクト) です。 例えば, 佐藤太郎 は 佐藤一家の 「お父さん」 です(そうだったとします)。 しかし同じ 佐藤家の「お父さん」佐藤太郎 であっても,別のもっと大きな枠で言うと 佐藤太郎は「人間」です。 人間の中の 佐藤家の「お父さん」 なだけで, 佐藤太郎 は,佐藤家の「お父さん」 には違いありません。 this は root であり root は MovieClip です。

その他の回答 (1)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

Documentクラスのクラスではない通常のクラスファイルからは ステージ上のインスタンスのパスは stage なども含めて直接指定できないので, (仮に指定できても汎用性の欠けたものしか作れないと思う) new するときの引数として ステージ や root のようなパスを渡せばできます。 例↓ ---タイムライン----------------- var smp:sample = new sample(this); ----------------------------- ---「sample.as」------------------- package { import flash.display.*; import flash.display.Shape; public class sample { private var me:MovieClip; public function sample(me) { var spr1:Sprite = new Sprite(); spr1.graphics.beginFill(0x0000FF); spr1.graphics.drawRect(0, 0, 300, 200); var spr2:Sprite = new Sprite(); spr2.graphics.beginFill(0xFF0000); spr2.graphics.drawCircle(150, 100, 50); spr1.addChild(spr2); me.addChild(spr1); } } } --------------------------------

John12345
質問者

お礼

ご指摘ありがとうございます。 さっそくタイムライン側のクラス呼び出しの引数に(this)を指定しましたが、同じエラーが表示されてしまいました。 引数の指定以外に必要なものはありますでしょうか? 宜しくお願いいたします。

John12345
質問者

補足

度々申し訳ありません。 ご指摘の通りタイムライン上で引数にthisを指定し、クラスのコンストラクタの前にprivate var me:MovieClip;と記述しmeにaddChildで追加した所、エラーが出ずに再生されましたが、何故クラス宣言の後に生成したMovieClipがステージに追加されたのかがわからなかったのでご教授いただけると幸いです。 初歩的な質問かもしれませんが、宜しくお願いいたします。

関連するQ&A