Путаница с местоположением кода в 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;
}
Это все, что нам нужно, чтобы охватить ваш пример, так что теперь мы переходим к третьему необходимому элементу, объявлению класса. В этом случае он состоит из трех частей:
- Пространство имен класса - может быть
internal
(если вы хотите, чтобы ваш класс был доступен из классов в одном пакете) илиpublic
(доступно в любом месте проекта). - Ваше имя класса.
- То, что ваш класс будет расширяться - в этом случае 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
Итак, давайте добавим это. Свойства обычно принадлежат непосредственно под объявлением класса и над конструктором. Свойства состоят из четырех частей:
- Пространство имен - это определяет доступность вашей собственности. Если вы пропустите это, по умолчанию будет
internal
, На данный момент это основы:public
- Ваша собственность доступна из любого места, где есть ссылка на экземпляр вашего класса.private
- Ваша собственность доступна только из класса - сначала это кажется бесполезным, но в конечном итоге вы обнаружите, что в первую очередь используете это.protected
- Ваша собственность доступна в классах, которые расширяют ваш класс.internal
- Ваша собственность доступна из классов, которые находятся в одном пакете.
- Ваше имя собственности.
- Ваш тип недвижимости.
- Ваша стоимость имущества.
В твоем случае, 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 частей:
- Пространство имен - методы используют те же пространства имен, что и свойства (см. Выше).
- Название метода
- Аргументы метода.
- Тип возврата.
- Содержание.
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).
Надеюсь это поможет.