AS3: Как получить доступ к свойству / методу из другого класса? - PullRequest
0 голосов
/ 14 марта 2012

новичок в Actionscript, ООП, этом форуме и т. Д. !!У меня большой проект, над которым я работаю, очень тяжелый текст и кнопки.Я хочу создать массив строк в текстовом классе, к которому я могу получить доступ с помощью основного класса документа.Тогда я смогу заполнить текстовое поле элементами в массиве.Цель этого - избежать массивных строк текста в моем основном документе ... но я даже не могу заставить свой тест работать.Компилятор говорит мне, что массив (txt1) не определен.Сначала вот мой код для массива:

  //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..."); 
} } }

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Обратите внимание, что ключевое слово private перед переменной? Это означает, что переменная работает только внутри объекта и недоступна вне объекта.

Вместо этого вы можете объявить переменную как public, а затем получить к ней доступ с точечной нотацией, например: theformat.txt1[0]

Однако публичные переменные - это плохая практика, поэтому вам лучше перестроить код так, чтобы к массиву не нужно было обращаться за пределами объекта, в котором он существует. Я имею в виду, вы не объяснили, что класс format5000 предназначен для; Я хотел бы создать метод createTextfield () в формате 5000, а затем вызвать этот метод из основного класса.

Так в формате 5000 я бы написал

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

, а затем в тексте5001

theformat = new format5000();
myText = theformat.createTextField(0);
myText.x = 50;
myText.y = 50;
addChild(myText);
0 голосов
/ 14 марта 2012

Добро пожаловать в стек !. Эта переменная должна быть общедоступной, чтобы другие классы могли получить к ней доступ.

private var txt1:Array = [];

должно быть

public var txt1:Array = [];

так что ваша строка кода будет:

myText.text = theformat.txt1[0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...