Программируем на Actionscript 3.0
Всем привет! К сожалению не получается пока публиковать статьи так часто, как хотелось бы, буду стараться делать это почаще. Сегодня хочу рассмотреть основы языка Actionscript 3.0, базовые приемы и принципы и специфику.
В основе базы языка Actonscript 3.0 лежит спецификация Ecmascript 4. Синтаксис очень похож на Javascript, содержит конструкции, подобные языку Java. Если кто-то знаком с вышеуказанными языками, им будет еще легче в освоении Actonscript 3.0. Подробнее можно почитать тут.
Специфика среды Flash (как и некоторых других) заключается в разделении вывода текстовой информации и графической, причем разделение уже сделано, и нам ничего не нужно с этим делать. Поясню: у нас имеется консоль и сцена. Чтобы вывести что-то, нам достаточно написать:
trace(<наша фраза, переменная и т. д.>);
чтобы создать клип, нам нужно будет создать его, а затем добавить его на сцену:
var <переменная> = new <конструктор класса>(); addChild(<переменная>);
Как создавать графические объекты, мы разберем попозже, когда научимся основам языка. А с выводом начнем знакомство прямо сейчас. Команда trace — не просто вывод, а вывод отладочный! Это значит, что в готовом swf мы его не увидим, он виден только в консоли среды разработки Flash. Давайте, что-нибудь выведем для начала, например: «Hello world, I’am Actionscript programmer!!!». Для чего напишем в первом кадре:
stop(); trace("Hello world, I'am Actionscript programmer!!!");
Если у кого возникают вопросы, где писать код, почитайте этот урок.
Запустим среду и увидим:
На вкладке output наша фраза. Вообще, вывод с использованием команды trace -по большей части — отладочный и очень помогает в поиске ошибок. Теперь немного усложним задачу и напишем программу для решения квадратных уравнений. Но писать будем не просто так, а немного познакомимся с подходом TDD. Подробно можете почитать тут, а применение концепции на сайте моего коллеги. В кратце поясню идею TDD (Test-Driving Development или разработка через тестирование). Идея подхода заключается в написании участков программы с последующим их тестированием, что позволяет сразу находить большую часть ошибок. Итак, приступим, но для начала немного познакомимся с типами данных.
Базовые типы данных:
Тип | Описание |
---|---|
Boolean | Логическая величина, может принимать значения «true» или «false». |
int | целочисленное 32-битное числовое значение в диапазоне от −231 до 231–1. |
uint | целочисленное 32-битное числовое значение в диапазоне от 0 до 232–1. |
Number | дробное 64-битное числовое значение в диапазоне от −253 до 253–1. |
Null | ноль. Ссылка на пустоту. |
String | Строчка из 16-битных символов. Используется кодировка UTF-16. |
void | тип данных с одним значением — undefined. Используется, если программист хочет указать тип функции как «невозвращаемый». |
Сложные типы данных:
Тип | Описание |
---|---|
Object | Объект. Ключевой класс ООП. Является основой всех классов AS3. |
Array | Массив данных нестрогой типизации. Может принимать любые значения, например: [‘a’, 5, new TextField()] |
Vector | Массив данных строгой типизации. Например массив Vector.<String> может содержать только строковые данные [‘a’,’b’,’ ‘] |
Date | Класс, содержащий сведения о дате/времени. |
Error | Класс, содержащий ошибки. |
Function | Основной класс. Примером является любой метод AS3. |
RegExp | Регулярные выражения |
XML | XML-объект, базирующийся на E4X (стандарт ECMA-357) |
XMLList | Array-базирущийся объект для поиска контента в XML-классе. |
Теперь мы узнали, типы данных и с чистой совестью можем приступить к разработке. Да простят меня адепты ООП (я и сам такой), но пока мы не рассмотрели классы, я буду использовать функцию для решения квадратного уравнения.
Для начала напишем заглушку для функции и вызовем функцию:
stop(); function decideEquation(a,b,c){ trace('done!'); } decideEquation(2,3,4);
Запускаем и проверяем. На вкладке output должно появиться «done!». Значит функция работает и вызываем мы ее правильно. Это уже первый шаг к методу TDD — мы немного написали и сразу проверили. Функция для решения уравнения готова, теперь вспомним немного теории:
Квадратное уравнение — это уравнение вида ax2 + bx + c = 0, где a, b и c — числа, а x — искомое неизвестное при котором левая часть уравнения будет равна правой.
Для поиска решений сначала находят дискриминант по формуле: D=b2 — 4ac.
Далее проверяем:
D>0 — 2 корня, вычисляемых по формуле:
D=0 — 1 корень (или как считают некоторые — 2 равных корня), который находим так:
D<0 — вещественных корней нет, поэтому корни комплексные, вдаваться в подробности не будем, будем как в школе считать, что корней нет.
Давайте выведем дискриминант в нашей функции и выведем его:
stop(); function decideEquation(a,b,c){ var d = Math.pow(b,2)-4*a*c; trace(d); } decideEquation(2,4,1);
В приведенном примере дискриминант больше, поэтому будет два корня, но нам необходимо обработать все три случая, поэтому напишем:
stop(); function decideEquation(a,b,c){ var d = Math.pow(b,2)-4*a*c; if (d>0){ trace((-b+Math.sqrt(d))/(2*a)); trace((-b-Math.sqrt(d))/(2*a)); } else if(d==0){ trace(-b/(2*a)); } else{ trace("equation haven't root"); } } decideEquation(2,4,5);
Все! Вывод решения будет зависеть от переданных коэффициентов. Сразу скажу, что это учебный пример и укажу на ошибки. Ошибка в выводе внутри функции, а лучше чтобы функция вернула результат, а мы с ним потом работали. Для использования такого подхода необходимо будет рассмотреть массивы и циклы, чем займемся в следующих уроках, а пока разберм то, что написали тут:
function <имя функции> (<параметры>)
объявление функции, к которой мы сможем обращаться <имя функции> (<параметры>);
var <имя переменной>
объявление переменной, к которой мы сможем обращаться <имя переменной>;
if (<условие>){<действия>}else{<действия>}
условный оператор, где при выполнении (не выполнении) определенного условия будут выполнены необходимые операции.
На этом закончу сегодняшний урок, а далее рассмотрим, что такое сложные типы данных, как функция может возвращать значения, рассмотрим циклы, а потом рассмотрим ООП.