Путаница с местоположением кода в Flash CS5

Всякий раз, когда я помещаю следующий код в первый кадр моего фильма, он отлично работает:

var strGlobal:String = "Global"; 
function scopeTest() 
{ 
    trace(strGlobal); // Global 
} 
scopeTest(); 
trace(strGlobal); // Global

Но когда я удаляю его и помещаю в класс документа, он выдает ошибку: "Вызов возможного неопределенного метода scopeTest" "Доступ к неопределенному свойству strGlobal"

Я новичок в ActionScript 3 и мне было интересно, что изменить, чтобы этот простой пример работал из моего основного класса документов.

2 ответа

Решение

В том же каталоге, что и ваш.fla файл, создайте файл с именем ScopeTest.as и определите следующий класс:

package  {
    import flash.display.MovieClip;
    public class ScopeTest extends MovieClip  {
        var strGlobal:String = "Global"; 
        public function ScopeTest() {
            trace(strGlobal); // Global 
        }
    }
}

Затем внутри вашего проекта.fla (класс документа):

Затем, когда вы запустите его, вы должны получить "Global", чтобы убедиться, что он работает.

Давайте посмотрим на написание класса документа.

Шаг 1: Объявление пакета - пакет указывает, где хранится класс.fla вашего документа. Если ваш класс документа находится в том же каталоге, что и.fla, вам просто нужно написать:

package

Если это в папке, вам нужно добавить это после package, Допустим, ваш класс документов находился в каталоге с именем src:

package src

Теперь, когда это отсортировано, у вас должно получиться что-то вроде этого:

package
{
    //
}

Следующее, что вам нужно сделать, это импортировать классы, которые вам понадобятся в вашем классе документов. Вы хотите продлить MovieClip в вашем классе документа, так что давайте импортировать это:

package
{
    import flash.display.MovieClip;
}

Это все, что нам нужно, чтобы охватить ваш пример, так что теперь мы переходим к третьему необходимому элементу, объявлению класса. В этом случае он состоит из трех частей:

  1. Пространство имен класса - может быть internal (если вы хотите, чтобы ваш класс был доступен из классов в одном пакете) или public (доступно в любом месте проекта).
  2. Ваше имя класса.
  3. То, что ваш класс будет расширяться - в этом случае MovieClip.

Все вместе, ваше будет выглядеть так:

public class Document extends MovieClip

Теперь у вас будет что-то вроде ниже, что означает, что вы можете начать добавлять properties а также methods:

package
{
    import flash.display.MovieClip;

    public class Document extends MovieClip
    {
        //
    }
}

Первое, что вы хотите сделать, это создать constructor для вашего класса. Конструктор вызывается, когда экземпляр этого класса создается, или, в вашем случае, является классом документа, немедленно.

Конструкторы определяются путем создания метода с тем же именем, что и содержащий его класс. Конструкторы также должны быть public и ничего не вернуть. Вот ваш новый код с пустым конструктором:

package
{
    import flash.display.MovieClip;

    public class Document extends MovieClip
    {
        // Constructor
        public function Document()
        {
            //
        }
    }
}

Следующим шагом является создание ваших свойств, которые будут принадлежать вашему классу. В вашем примере вы использовали strGlobal:StringИтак, давайте добавим это. Свойства обычно принадлежат непосредственно под объявлением класса и над конструктором. Свойства состоят из четырех частей:

  1. Пространство имен - это определяет доступность вашей собственности. Если вы пропустите это, по умолчанию будет internal, На данный момент это основы:
    • public - Ваша собственность доступна из любого места, где есть ссылка на экземпляр вашего класса.
    • private - Ваша собственность доступна только из класса - сначала это кажется бесполезным, но в конечном итоге вы обнаружите, что в первую очередь используете это.
    • protected - Ваша собственность доступна в классах, которые расширяют ваш класс.
    • internal - Ваша собственность доступна из классов, которые находятся в одном пакете.
  2. Ваше имя собственности.
  3. Ваш тип недвижимости.
  4. Ваша стоимость имущества.

В твоем случае, strGlobal будет выглядеть примерно так:

public var strGlobal:String = "Global";

Давайте добавим это в ваш класс документов:

package
{
    import flash.display.MovieClip;

    public class Document extends MovieClip
    {
        // Properties
        public var strGlobal:String = "Global";

        // Constructor
        public function Document()
        {
            //
        }
    }
}

Далее вы захотите создать свой метод scopeTest() согласно вашему вопросу Методы состоят из 5 частей:

  1. Пространство имен - методы используют те же пространства имен, что и свойства (см. Выше).
  2. Название метода
  3. Аргументы метода.
  4. Тип возврата.
  5. Содержание.

scopeTest() не имеет никаких аргументов и ничего не возвращает, поэтому будет выглядеть так:

public function scopeTest():void
{
    trace(strGlobal);
}

Методы обычно находятся в любом месте ниже вашего конструктора, так что давайте теперь добавим его:

package
{
    import flash.display.MovieClip;

    public class Document extends MovieClip
    {
        // Properties
        public var strGlobal:String = "Global";

        // Constructor
        public function Document()
        {
            //
        }

        // Output the value of strGlobal
        public function scopeTest():void
        {
            trace(strGlobal);
        }
    }
}

Теперь, когда все готово, вы сможете позвонить scopeTest() из вашего конструктора. Поскольку конструктор вызывается немедленно, вы должны увидеть Global распечатывается на панели вывода (при условии, что вы правильно связались с ней в Flash IDE).

Надеюсь это поможет.

Другие вопросы по тегам