Ошибка компиляции Flash - PullRequest
0 голосов
/ 03 апреля 2011

Я работаю над очень простой флэш-памятью, но у меня проблемы с компиляцией в файл swf.Подробная информация об ошибке примерно переводится следующим образом:

* AssetManager.as

Строка 47: переменная DisplayObject не может быть «неопределенной»

Строка 51: Переменная DisplayObject не может быть «неопределенной»

Строка 101: переменная DisplayObject не может быть «неопределенной»

enter image description here

* SWFaddress.as

Строка 10: метод void был использован там, где требовалось логическое значение

Строка 60: проблема смещения (я подозреваю, это означает, что некоторые файлы были перемещены в другое место), метод clearInterval больше не поддерживается,он был перемещен в пакет flash.utils

Строка 243: метод setInterval больше не поддерживается, он был перемещен в flash.utils.пожалуйста, обратите внимание на класс таймера

enter image description here

Пожалуйста, обратитесь к снимкам экрана, и соответствующая строка кода была выделена.

Ответы [ 2 ]

2 голосов
/ 03 апреля 2011

Если .getChildByName() не смог получить вам DisplayObject, он вернет ноль. Попробуйте изменить неопределенный на ноль. (строки 47, 51, 101 в AssetManager.as)

Вместо использования setInterval и clearInterval из flash.utils.* используйте flash.utils.Timer. Например:

var myTimer:Timer = new Timer(1000); // 1 second
myTimer.addEventListener(TimerEvent.TIMER, runMany);
myTimer.start();

function runMany(event:TimerEvent):void {
    trace("runMany() called @ " + getTimer() + " ms");
}

И использовать .stop() для объекта таймера вместо clearInterval. Подробнее о классе Timer: flash.utils.Timer .

В случае ExternalInterface.available Полагаю, проблема в том, что у вас переменная _availability, определенная как static.

P.S. Ссылка на скриншоты вашего кода не очень хороший способ, как это сделать .. Лучше вставьте код в следующий раз.

1 голос
/ 03 апреля 2011

Хотя я никогда не пытался сделать что-то подобное и поэтому не могу сказать точно, я собираюсь предположить, что странные ошибки, которые вы получаете в SWFAddress, вызваны вашим чрезмерным использованием статики. Вы определяете статическую переменную, когда приводите ее в статическое пространство имен на основе другой статической переменной. Компилятор, вероятно, говорит, что void возвращается, потому что одна статика определяется перед другой, и значение по умолчанию для неопределенной статики, скорее всего, void, а не null. Трудно сказать наверняка, так как для этого потребуется просмотреть исходный код тамарина C ++, но я все равно назову его. Чрезмерное использование статики, как в случае вашего кода, свидетельствует о недостаточном понимании структур классов и объектов. Единственный раз, когда вы должны определять статику, это когда вы хотите определить типы объекта или что-то в этом роде. Например, класс MouseEvent имеет статические значения, чтобы определить, какой тип событий мыши может быть создан: MouseEvent.MOUSE_DOWN и т. Д. Попробуйте изменить классы, чтобы они были созданы правильно, используя методы и переменные уровня объекта вместо статических. Или, если вы хотите просто выполнить свой проект здесь, попробуйте определить статические переменные, основанные на других статических переменных внутри функций, которые вы вызываете вручную, а не в пространстве имен static / class.

* Обновление * Трудно объединить все это в один ответ, но в основном так работают статики, они являются первой вещью, создаваемой виртуальной машиной, и являются постоянными. Они не являются динамическими или одноразовыми объектами, тип объектов, которые виртуальная машина была действительно создана для использования. Статика определяется прежде всего, поэтому в случае нечетной ошибки, когда вместо логического значения вы получаете пустоту, это происходит потому, что, когда компилятор или виртуальная машина перемещается вниз по списку «дел», они всплывают так: наверх и делает их в первую очередь. Однако он, вероятно, пытается определить статическую переменную _availability до того, как статическая переменная ExternalInterface.available будет полностью определена. Я надеюсь, что это добавляет немного пояснения к первоначальному ответу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...