Размещение кода AS3 на шкале времени / времени MC а-ля AS2 вместо классов - PullRequest
0 голосов
/ 02 июня 2010

Мне известно, что ActionScript 3.0 изначально разрабатывался как в значительной степени объектно-ориентированный язык, и его использование означает меньше или даже отсутствие кода временной шкалы в документах Flash.

У меня достаточно опыта в ООП, и я неплохо пишу на уроках. Однако, поскольку я в основном использую Flash для анимации, мне едва ли когда-либо понадобится для написания кода ActionScript, отличного от предварительных загрузчиков, субтитров, элементов управления качеством, ссылок на веб-сайты и так далее. На самом деле, я до сих пор настраиваю свои Flash-фильмы на использование AS2, потому что я привык к gotoAndPlay() / gotoAndStop(), предварительным загрузчикам AS2, субтитрам, контролю качества и даже getURL(). Конечно, я действительно хочу двигаться дальше, поскольку практически все работают на Flash Player 9 или 10, и теперь, когда я пробовал себя и на других языках OO, таких как Java, C # и Objective-C, тоже.

Я новичок в AS3 и не очень разбираюсь в AS2. Учитывая мое текущее использование ActionScript, есть ли случаи, когда все еще можно использовать очень простой код AS3 на временной шкале вместо перемещения кода в класс, тем более что переход на класс может означать излишнее увеличение числа LOC с 4 до 40 ? (Черт, последний случай («вместо ...») вообще имеет значение?)

Ответы [ 2 ]

4 голосов
/ 03 июня 2010

Если вы уже знакомы с AS2 (и у вас есть опыт работы с другими языками), переключение на AS3 не должно быть слишком сложным. Есть несколько мест, где вещи немного изменились: в основном модель событий и некоторые широко используемые API-интерфейсы, такие как flash.net (то есть загрузка материалов, будь то изображения, SWF-файлы, звуки, XML и т. Д.) И список отображения (много больше опций, чем просто мувиклип, более последовательный, повторный просмотр и т. д.). Работа с XML также изменилась (навсегда), и он стал более мощным и простым (но вы можете использовать старый API, если хотите, он все еще там). Тем не менее, большая часть самого языка не сильно изменилась.

Я уверен, что вы знаете о потенциальных проблемах с кодом на временной шкале. Что ж, то же самое относится и к AS3, хотя некоторые вещи, такие как размещение кода на объектах, не разрешены в AS3.

Я не вижу проблемы в размещении материала на сцене в IDE и использовании мувиклипов для анимации. ИМО, вот почему они там в первую очередь. Я знаю, что некоторые люди зациклены на создании и позиционировании всего кода. Я не из тех. Для меня IDE может быть хорошим инструментом для разметки, твининга и т. Д., По крайней мере, в большинстве случаев (с другой стороны, для некоторых очень динамичных вещей вам также придется кодировать разметку).

Так что я бы не советовал против умеренного использования кода временной шкалы. Если это соответствует вашим потребностям, вписывается в ваш рабочий процесс и позволяет вам делать то, что вам нужно, не делая невозможным поддерживать (или даже следить) беспорядок, почему бы и нет?

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

2 голосов
/ 03 июня 2010

Из приведенных вами примеров того, как вы используете Flash, ничего не изменилось, чтобы сделать что-то более сложное. Нет причин, по которым вам следует использовать внешний код для всего вышеперечисленного. Вы можете работать почти так же, как и раньше (gotoAndPlay, gotoAndStop все еще существуют и работают просто отлично). Единственное, что приходит на ум, это более утомительно, чем раньше, это тот факт, что больше нет getURL(). Однако Senocular переделал класс getURL, и вы можете найти его здесь .

Я бы сказал, только если ваш проект особенно тяжелый для кода, тогда переместите большинство, если не все, в классы и правильно структурируйте их в ООП. Черт возьми, вы даже можете просто передать ссылку на свою сцену в базовый класс и просто действовать довольно просто так же.

В вашей временной шкале .fla:

import com.yourdomain.Main;

var main:Main = new Main(this);

В вашем внешнем основном классе:

package com.yourdomain
{   
    public class Main
    {
        private var mainTimeline:Object;

        public function Main(_mainTimeline:Object):void
        {
            mainTimeline = _mainTimeline;

            mainTimeline.gotoAndPlay("fScream");
        }
    }
}
...