メイン ActionScript 3.0 特設会議室 パブリックメソッドでボタンが表示できない | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
asuki | Åê¹ÆNo.38850 投稿日時: 2008-5-16 23:57 |
新米 居住地: 神奈川県 投稿: 9
使用環境:
WinXP,Flssh CS3 |
パブリックメソッドでボタンが表示できない 初めて投稿します。
AS3のFLAファイルで、コンポーネントのボタンをライブラリに追加してから、空のムービークリップtest_mc1、test_mc2をそれぞれステージに配置。 リンケージクラスをtest_mc1はTestBtn1、test_mc2はTestBtn2にしました。(基本クラスはflash.display.Sprite) ASファイルを以下のようにしてムービープレビューしてみると、TestBtn1のbtnをclickしても画面にはTestBtn2のbtn2ボタンが表示されません。 traceは実行されますし、表示オブジェクトであると共に可視状態にもなっています。 また、TestBtn2自身からのaddChildなら表示されます。 何か足りないものがあるのでしょうか? よろしくお願いします。 ------------------------------------------------------------ TestBtn1.as ------------------------------------------------------------ package{ import flash.display.Sprite; import fl.controls.Button; import flash.events.MouseEvent; public class TestBtn1 extends Sprite{ private var btn:Button; public function TestBtn1(){ setupBtn(); } private function setupBtn():void{ btn=new Button(); btn.setSize(150,20); btn.label="TestBtn1_Button"; btn.move(100,100); addChildFunc(); } private function addChildFunc():void{ addChild(btn); btn.addEventListener (MouseEvent.CLICK,btnClickHandler); } private function btnClickHandler(e:MouseEvent):void{ var testBtn2:TestBtn2=new TestBtn2(); testBtn2.btn2addChildFunc(); } } } ------------------------------------------------------------ TestBtn2.as ------------------------------------------------------------ package{ import flash.display.Sprite; import fl.controls.Button; public class TestBtn2 extends Sprite{ private var btn1:Button; private var btn2:Button; public function TestBtn2(){ setupBtn(); } private function setupBtn():void{ btn1=new Button(); btn1.setSize(150,20); btn1.label="TestBtn2_Button1"; btn1.move(300,100); btn2=new Button(); btn2.setSize(150,20); btn2.label="TestBtn2_Button2"; btn2.move(300,200); btn1addChildFunc(); } private function btn1addChildFunc():void{ addChild(btn1); } public function btn2addChildFunc():void{ this.addChild(btn2); trace("実行しました"); if(this.contains(btn2)==true){ trace("表示オブジェクトです"); } if(btn2.visible==true){ trace("可視状態です"); } } } } ------------------------------------------------------------ |
野中文雄 | Åê¹ÆNo.38852 投稿日時: 2008-5-17 0:57 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: パブリックメソッドでボタンが表示できない まず、できるかぎり問題は単純化して試すべきでしょう。
インスタンスがStageオブジェクトを頂点とする表示リストに加わっていなければ、ステージ上に表れません。 引用: asukiさんは書きました:
|
asuki | Åê¹ÆNo.38853 投稿日時: 2008-5-17 2:17 |
新米 居住地: 神奈川県 投稿: 9
使用環境:
WinXP,Flssh CS3 |
Re: パブリックメソッドでボタンが表示できない 野中 様
早速のレスありがとうございます。 ごめんなさい。もっと簡略化すべきでした。 TestBtn2.as にて、 private function btn1addChildFunc():void{ var rootObj:Object=this.root as Object; trace(rootObj); // [object MainTimeline] } とステージを参照できるのに、 public function btn2addChildFunc()void{ var rootObj:Object=this.root as Object; trace(rootObj); // null } とnullになってしまうのがよくわかりません。 このpublic function の中身は”誰”のものなのでしょうか? |
野中文雄 | Åê¹ÆNo.38854 投稿日時: 2008-5-17 2:41 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: パブリックメソッドでボタンが表示できない 私の環境では、両方ともnullが[出力]されます。btn1だけは、表示されるということですか?
引用: asukiさんは書きました:
インスタンスメソッドの持ち主は、クラスのインスタンスです。 引用: このpublic function の中身は”誰”のものなのでしょうか? |
asuki | Åê¹ÆNo.38855 投稿日時: 2008-5-17 3:13 |
新米 居住地: 神奈川県 投稿: 9
使用環境:
WinXP,Flssh CS3 |
Re: パブリックメソッドでボタンが表示できない 野中 様
真夜中のご返答ありがとうございます。 説明不足で申し訳ありませんでした。 最初のprivate function はTestBtn2からの実行でしたのでnullにはなりませんでしたが、ボタンを押すと両方ともnullが返ってきました。 インスタンスメソッドの持ち主がクラスのインスタンスということは、TestBtn2の中に記述されていても、それはTestBtn1のもの?だということでしょうか?なんだかこんがらがってきました(^^! とすると、TestBtn2のボタンを他のクラスから表示させようとするなら、どのような方法があるのでしょうか? 実際には、TestBtn1にセレクトボタンを配置して、それに応答する形でTestBtn2クラスや他のクラスで様々なボタンを表示させたかったのですが・・・ |
野中文雄 | Åê¹ÆNo.38856 投稿日時: 2008-5-17 3:34 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: パブリックメソッドでボタンが表示できない 言葉だけで抽象的に話されるから、「こんがらがって」くるのだと思いますよ。疑問点を抽出したシンプルなスクリプトで、具体的にどのメソッドが、どのインスタンスを参照するのかとお考えになった方が理解は深まります。
引用: asukiさんは書きました: 先の回答に示したフレームアクションの[出力]の意味は、おわかりになりましたか? 引用: とすると、TestBtn2のボタンを他のクラスから表示させようとするなら、どのような方法があるのでしょうか? |
asuki | Åê¹ÆNo.38857 投稿日時: 2008-5-17 4:40 |
新米 居住地: 神奈川県 投稿: 9
使用環境:
WinXP,Flssh CS3 |
Re: パブリックメソッドでボタンが表示できない 野中 様
たびたびのご返答、恐縮です。 import flash.display.MovieClip; var _mc:MovieClip = new MovieClip(); trace(_mc.parent, _mc.root); // null null addChild(_mc);trace(_mc.parent, _mc.root); // [object MainTimeline] [object MainTimeline] 表示リストに追加されて初めてアクセスできることは理解できました。 そもそもステージにインスタンスを複数配置して、表示ツリー構造を無視したようなやり方が間違っていることも理解できました。 表示専門のクラスを置いて、そこに別のクラスから表示させる作り方を考えてみます。 |
野中文雄 | Åê¹ÆNo.38858 投稿日時: 2008-5-17 5:05 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: パブリックメソッドでボタンが表示できない ムービーやスクリプトの構成の仕方は、いくつか考えられるでしょう。いずれにしても、まずはシンプルな内容で試してみることが大切です。
引用: asukiさんは書きました: |
asuki | Åê¹ÆNo.38859 投稿日時: 2008-5-17 5:44 |
新米 居住地: 神奈川県 投稿: 9
使用環境:
WinXP,Flssh CS3 |
Re: パブリックメソッドでボタンが表示できない 野中 様
おはようございます。とうとう夜が明けてしまいました。 おおっ! DisplayObjectContainerでしたか ActionScript3.0コンポーネントリファレンスには 「DisplayObject は抽象基本クラスであるため、DisplayObject を直接呼び出すことはできません。new DisplayObject() を呼び出すと ArgumentError 例外がスローされます。---中略--- これは直接インスタンス化することはできません。new DisplayObjectContainer() コンストラクタを呼び出すと、ArgumentError 例外がスローされます。」 とあったため、何か怖くてなかなか近づけないでいました。 目からウロコです! 夜通しお付き合いくださいましてありがとうございました。 ごゆっくりお休みください(_ _; zzz... |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |