2012-03-14 5 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 = []; 

그래서 코드를 당신의 라인이 될 수 있어야 :

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

흠, 그게 편집 된 것 같지만 편집에 대한 통지가 없습니다 – jhocking

+0

내가 편집 중이었던 것처럼;) – crooksy88

1

공지 사항이 변수 앞에 키워드 private? 이는 변수가 객체 내에서만 작동하고 객체 외부에서는 액세스 할 수 없음을 의미합니다.

대신 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! 나는 매우 감사한다. 호기심에서 "공공"에 대한 액세스를 변경하려고 노력했습니다. 그러나 나는 최선의 방법을 연습하고 싶다. 그래서 나는 대신 당신의 충고를 받아 format5000 클래스 내에서 함수를 만들었다. 시간 내 주셔서 다시 한 번 감사드립니다! –

관련 문제