2012-03-14 10 views
0

Actionscript、OOP、このフォーラムなどが新しくなりました!私は私が取り組んでいる大規模なプロジェクト、非常にテキストとボタンが重いです。私は、メインのドキュメントクラスでアクセスできるテキストクラスの文字列の配列を作成したいと思います。次に、配列内の項目をテキストフィールドに取り込むことができます。これは主な文書に大量のテキスト行が存在するのを避けるためですが、私のテストがうまくいかないこともあります。コンパイラは配列(txt1)が定義されていないことを私に伝えています。まずここでは、配列のための私のコードです:AS3:別のクラスのプロパティ/メソッドにアクセスするには?

//text array class:format5000 
    package { 

    import flash.display.MovieClip; 
    import flash.text.*; 
    import flash.events.MouseEvent; 

    public class format5000 extends MovieClip { 

     private var txt1:Array = []; 

    public function format5000() { 
     // constructor code 
     txt1[0] = "This is the first txt string"; 
     trace("format loaded"); 
     trace(txt1[0]); 
} } } 

そしてここでは、メインドキュメントのコードです:

//main doc class: text5001 
package { 

    import flash.display.MovieClip; 
    import flash.display.*; 
    import flash.events.*; 
    import flash.text.*; 


    public class text5001 extends MovieClip{ 

     private var myText:TextField; 
     private var theformat:format5000; 

    public function text5001() { 
     // constructor code 

     theformat = new format5000(); 

     addChild(theformat); 
     myText = new TextField(); 
     myText.text = txt1[0]; 
     myText.x = 50; 
     myText.y = 50; 
     addChild(myText); 
     trace("text loading..."); 
} } } 

答えて

-1

はスタックへようこそ!このvarは他のクラスがアクセスできるようにpublicにする必要があります。

private var txt1:Array = []; 

public var txt1:Array = []; 

する必要がありますので、コードのあなたの行は次のようになります。変数の前でprivateをキーワード

myText.text = theformat.txt1[0]; 
+0

で、その後

public function createTextField(index:int):TextField { var myText:TextField = new TextField(); myText.text = txt1[index]; return myText; } 

とを記述し、コードは' theformat.txt1 [0になります] ' – jhocking

+0

hm、それは編集されたように見えますが、編集に関する通知はありません – jhocking

+0

あなたがマークしていたので編集していました;) – crooksy88

1

お知らせ?つまり、変数はオブジェクト内でのみ動作し、オブジェクトの外部ではアクセスできません。

代わりpublicとして変数を宣言することができ、その後、あなたはそうのようなドット表記でアクセスできますtheformat.txt1[0]

しかし、パブリック変数は悪い習慣の一種である、あなたのコードを再構築したほうが良いかもしれませんので、その配列は、それが存在するオブジェクトの外部でアクセスする必要はありません。つまり、format5000クラスが何であるかを説明していませんでした。私はformat5000でメソッドcreateTextfield()を作成し、そのメソッドをメインクラスから呼び出します。

のでformat5000に、私はあなたから `root`を得たところ私にはわからないtext5001

theformat = new format5000(); 
myText = theformat.createTextField(0); 
myText.x = 50; 
myText.y = 50; 
addChild(myText); 
+0

Genius!私は非常に感謝しています。好奇心のために、私は "公開"へのアクセスを変更しようとしました。しかし、私はget-goからベストプラクティスを練習したいので、代わりにあなたのアドバイスを受け取り、format5000クラス内で関数を作成しました。あなたの時間をもう一度ありがとう! –

関連する問題