2012-03-14 87 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]); 
} } } 

而这里的代码主要DOC:

//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

欢迎堆栈!这个变种应该是公开的,所以其他类可以访问它。

private var txt1:Array = []; 

应该

public var txt1:Array = []; 

所以你的代码行是:

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

我不知道从何处取得'root',代码将是'theformat.txt1 [0 ]' – jhocking 2012-03-14 03:45:17

+0

hm,它看起来像被编辑过,但没有关于编辑的通知 – jhocking 2012-03-14 11:36:10

+0

我正在编辑,因为你打了下来;) – crooksy88 2012-03-14 12:34:19

1

注意,在变量前面的关键字private?这意味着变量只能在对象内运行,不能在对象外访问。

你可以声明变量为public代替,然后你可以用点表示法访问它,像这样:theformat.txt1[0]

然而,公共变量是一种好的做法,所以你可能会更好重组你的代码这样数组就不需要在它存在的对象之外访问。我的意思是,你没有解释format5000类是什么,我将在format5000中创建一个方法createTextfield(),然后从主类中调用该方法。

所以在format5000我会写

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

,然后在text5001

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

天才!我非常感激。出于好奇,我试图改变访问“公共”,这工作。但是我想从一开始就练习最佳实践,所以我接受了您的建议并在format5000类中创建了一个函数。感谢你的宝贵时间! – 2012-03-15 00:38:00

相关问题