Для кнопки «очистить» код аналогичен коду из предыдущей задачи.
Не смотря на то, что теоретически для любого A найдется значение n но в действительности даже для A=10, n=12367. Для больших значений A вычисление данной задачи может затянуться на минуты и часы…
Вопросы для повторения:
В чем отличие цикла "с параметром" и "пока"?
Какой цикл является более универсальным?
Что такое "счетчик" в цикле "с параметром" и что означает команда i++?
Как написать программу, выполняющую возведене в степень с помощью цикла "пока"?
Почему при выполнении цикла "пока" возможно зависание программы? Как этого избежать?
6. Проект «Flash-калькулятор»
Для того, чтобы посмотреть язык Action Script в действии давайте сделаем что-то действительно стоящее. Давайте сделаем калькулятор, внешний вид представлен на Рисунок 13.
Рисунок 13
Цель проекта: Создать стандартный калькулятор для Internet с возможностью производить стандартные арифметические действия. Для ввода значений использовать как мышь, так и стандартные клавиши клавиатуры.
Во-первых, создайте динамическое поле вывода и дайте ему имя, например, text. Во-вторых, создайте необходимое кол-во кнопок для нашего калькулятора. В-третьих, давайте начнем думать.
Нас ожидают три проблемы:
Первая проблема состоит в том, что, набирая первое число, каждая цифра добавляется в конец уже набранного числа, а после нажатия кнопки с изображением арифметического действия следующая цифра ставится в начало строки.
Когда мы будем вводить первое число, например 245, мы последовательно нажимаем кнопки 2, 4 и 5. Но как калькулятор узнает, что когда мы нажали на кнопку 2 – это двести, а не двадцать или две тысячи? Иными словами, как узнать какое число запоминать в первой переменной?
Третья проблема в том, что нужно использовать как минимум три переменных для первого, второго числа и также результата, а динамическое поле и имя его переменной только одно!
220" height="52" bgcolor="white" style="vertical-align:top;background: white">
https://pandia.ru/text/78/159/images/image013_35.gif" width="12" height="36">
Для решения первой проблемы нам потребуется дополнительная переменная, назовем ее stek. Ее назначение в том, чтобы отслеживать текущее действие. Когда вводится первое число ее значение, должно быть, допустим, единица. В момент, когда начнет вводиться вторая цифра первого числа значение переменной должно уже быть, скажем, двойка. В момент, когда начнет вводиться второе число значение переменной должно уже быть равно трем. В момент вычисления результата, переменная stek вновь должна принять значение равное единицы, чтобы полученный результат смог стать первым числом для последующих действий.
Все это означает, что нам не обойтись одним ключевым кадром. Желательно на новом слое создайте ключевой кадр и в нем задайте значение переменной stek равное единице. Во втором ключевом кадре добавьте всего одну команду Базовые действия – Остановить. Содержимое слоя калькулятор, в котором находятся все кнопки передвиньте во второй кадр (Рисунок 14). Теперь при запуске программы переменная stek принимает нужное значение, ролик переходит во второй кадр и останавливается. Все дальнейшие действия будут проходить именно там.
Рисунок 14
Для решения второй проблемы вводимое значение должно быть текстовым! При нажатии на цифру, например 1, будет происходить добавление к текстовой строке, состоящей из цифр еще одного символа
Ну а условный оператор и переменная stek помогут довести дело до конца. Ниже
представлен код, присвоенный клавише 1. Для всех остальных кнопок код аналогичен.
on (release, keyPress "1") {
‘ помимо обычного on (release) добавлена возможность использовать клавиатуру. keyPress "1" означает, что следующий код будет исполняться не только при нажатие на экранную кнопку, но и при нажатие на клавишу на клавиатуре. Как этого добиться смотри Рисунок 15.
‘ Если переменная stek равна единице, то переменная text, связанная с динамическим полем вывода примет значение равное единице, а переменная stek станет равна двум.
} else if (stek==2) {
‘ Если переменная stek равна двум, то единица не первая цифра в числе, поэтому она присоединяется к переменной text справа
} else if (stek==3) {
‘ Если переменная stek равна трем, то единица первая цифра во втором числе
Рисунок 15
Третья проблема решается достаточно легко. Нам нужно хранить введенные числа в промежуточных переменных. Давайте проанализируем программный код, соответствующий клавишам арифметических действий, в них реализовано решение данной проблеммы:
on (release, keyPress "+") {
и программному коду, соответствующему клавише равно.
on (release, keyPress "=") {
text = parseFloat(a)+parseFloat(text);
} else if (o=="m") {
text = parseFloat(a)-parseFloat(text);
} else if (o=="u") {
text = parseFloat(a)*parseFloat(text);
} else if (o=="d") {
text = parseFloat(a)/parseFloat(text);
В первом фрагменте должно быть все ясно. Если нажата клавиша «плюс» еще одна переменная o принимает значение p (plus), а значение переменной text запоминается во временной переменной a. И когда, наконец, нажимается клавиша равно, компьютер должен сложить значение хранящееся в переменной text и переменную a. Так как в переменных хранятся текстовые значения необходимо использовать функцию parseFloat(), которая преобразует текстовое выражение в число. Для ее вызова используется команда Функции – parseFloat.
Запускайте проект, тестируйте его. Нельзя сказать, полученный калькулятор идеален. В нем нет стандартных математических функций, для выполнения нескольких действий подряд всегда нужно нажимать равно. Но все усовершенствования вы можете сделать самостоятельно. Мы научились главному. Создавать несложные программные продукты с помощью Macromedia Flash.
Вопросы для повторения:
С какими проблемами мы столкнулись создавая калькулятор? В чем назначение переменной stek? Почему нажимая на цифровую клавишу в переменной должно храниться текстовое выражение? Для чего служит функция parseFloat()? Предложите идею как выполняя несколько арифметических действий "подряд" не нажимать в промежутках клавишу "равно"?
7. Объектно-ориентированное программирование.
Если вы знакомы с программированием на языках, таких как Pascal или Basic, то вы наверно заметили, что программирование на Flash на них совсем не похож. Все дело в том, что Action Script ближе не к процедурным языкам программирования, а к объектно-ориентированным, таким как Visual Basic или Delphi.
Не собираясь подробно останавливаться на сравнении этих языков, тем боле, что Action Script – это не самостоятельный язык, основные понятия нам необходимо знать. Прошу сразу простить меня за несколько вольное изложение такого фундаментального понятия как объектно-ориентированное программирование (ООП), в основе которого лежат такие непростые понятия как инкапсуляция и полиморфизм.
В основе ООП лежит объектная модель приложения, где все объекты являются элементами определенного класса (Рисунок 16). Так в основе приложения Flash лежит ролик, он состоит из одной или нескольких сцен. На сцене находятся графические объекты и объекты библиотеки. Также сцена имеет временную шкалу, на которой находятся кадры. Ключевые кадры, символы типа клип и типа кнопка могут иметь собственный код на языке Action Script.
В настоящих объектно-ориентированных языках к каждому элементу объектной модели можно обращаться программно. В Macromedia Flash вы можете обращаться программно с помощью Action Script только к некоторым из таких элементов.
Вообще говоря во Flash есть возможность создавать объектные переменные, но это выходит за рамки нашего элективного курса.
https://pandia.ru/text/78/159/images/image020_25.gif" width="612" height="420 src=">
Рисунок 16
Объектную модель вашего конкретного ролика вы всегда сможете посмотреть с помощью плавающей панели «Проводник по видеофрагментам».
рисунок 17 (представлен фрагмент объектной модели для предыдущего проекта
Flash-калькулятор)
Изменяемые объекты имеют свойства, то есть то, что можно изменять. Например, клип видеофрагмента имеет свойство координату X, в Action Script существуют методы, с помощью которых это свойство мы можем изменять. (и тем самым создавать программную анимацию). Подробней об этом в следующей главе.
Каждый вызов программного кода сопровождает некоторое событие, таким событием может быть нажатие экранной кнопки или нажатие клавиши клавиатуры.
Вопросы для повторения:
Назовите объектно-ориентированные языки программирования. Из каких элементов состоит объектная модель Flash? Какие элементы вы можете изменять программно? Поясните смысл терминов объект, свойство, метод, событие. На какие события реагирует Flash-ролик?
8. Программное изменение свойств.
Символы библиотеки типа клип видеофрагмента могут иметь изменяемые свойства. Это означает, что вы можете программно изменить размер, положение или видимость данного объекта. Как это реализовано?
Рисунок 17
Нарисуйте объект, например прямоугольник.
Поместите его в библиотеку, причем обязательно он должен быть клипом видеофрагмента;
На плавающей панели «Копия» обязательно нужно задать имя данного объекта, например, zzz (Рисунок 17).
В панели «Действия кадра» выбирайте команду Операции – Set Property (установить свойства). Данная команда имеет три настраиваемых поля. Свойство – то свойство объекта, которое мы хотим изменить, например, _x (x Позиция), положение объекта по оси Х. Цель – имя копии объекта, в данном случае – zzz. Значение – чему равно выбранное свойство, в этом поле может находиться конкретное число либо выражение, но в любом случае не забудьте поставить флаг у выключателя «Выражение» (Рисунок 18).
Вот и все, если вы запустите проект, то вы увидите, что ваш прямоугольник переместился и теперь координата его центра будет равна ста.
Рисунок 18
Полный набор изменяемых свойств находится в окне «Свойства кадра» раздел Свойства, а их значение можно найти в литературе. Давайте рассмотрим основные свойства, многие из них нам потребуются в дальнейшем в проекте:
Alpha – прозрачность объекта, изменяется от нуля – полная прозрачность, до 100 полная видимость;
Visible – очень похожее свойство, означает видимость. Свойство имеет только два значения – ноль (объект невидим) и единица (полная видимость объекта);
Рисунок 19
Height – высота объекта, измеряется в пикселях;
Width – ширина объекта, измеряется в пикселях;
Rotation – поворот объекта, относительно его центра, измеряется в градусах;
X – координата по x;
Рисунок 20
Y – координата по y, координата верхнего левого угла принимает значение равное (0,0);
Xscale – изменение масштаба по оси x;
Yscale – изменение масштаба по оси y;.
Как вы заметили, все свойства начинаются со знака подчеркивания.
Так как нам нужно не только программно изменять свойства объекта, но и отслеживать их текущее значение нам потребуется функция GetProperty (получить свойства). Команда вызывается в окне «Действия кадра» Функции – GetProperty() (Рисунок 19). Функция имеет два параметра. Target – цель, вместо слова target записывается имя копии символа объекта. Property – изменяемое свойство, вместо слова property, например, можно написать _x, получение текущей координаты по x. Данная функция используется, как правило совместно с командой установить переменную или внутри другой команды (Рисунок 20).
x = getProperty (zzz, _x);
Данная команда означает, что в переменной x будет сохранена текущая координата объекта, по имени zzz.
Рассмотрим, как можно использовать изменение свойств в проекте. Создайте объект, свойства которого можно изменять. Пример экрана представлен на Рисунок 21.
Рисунок 21
Создайте объект и превратите его в символ типа клип видеофрагмента.
Дайте имя копии этого символа на плавающей панели «Копия», например, «Ob».
Создайте набор кнопок. В принципе, набор кнопок может быть произвольным, в проекте используются кнопки изменяющие координаты объекта, а также изменяющие масштаб и прозрачность объекта.
Добавьте к кнопке, которая перемещает объект вверх следующий код:
on (release, keyPress "") {
setProperty ("Ob", _y,
getProperty (Ob, _y) - 5);
данная команда изменяет свойство объекта «Ob», его координату y. Для того чтобы объект переместился вверх вычисляется его текущая координата и от нее отнимается 5.
Другие кнопки имеют аналогичный код, отличающийся только тем свойством, которе вы собираетесь изменять. Для примера приведем еще один:
setProperty ("Ob", _xscale, getProperty (Ob, _xscale) + 5);
setProperty ("Ob", _yscale, getProperty (Ob, _yscale) + 5);
Данный код увеличивает масштаб объекта. Для пропорционального увеличения необходимо увеличить размер как по оси x, так и по оси y. Поэтому в данном скрипте две команды.
Вопросы для повторения:
К каким символам библиотеки можно обращаться программно? Как это организовать? Какие свойства объектов вы изучили? Какой у них смысл? В чем разница команд setProperty и getProperty? Объясните смысл строки: setProperty ("Ob", _xscale, getProperty (Ob, _xscale) + 5); Предположите, как можно изменять свойства других объектов, например, кнопок?
9. Трехкадровые циклы. Программная анимация.
Программное изменение свойств объектов позволяет создавать программную анимацию. В отличие от стандартной анимации, которую можно создать в программе Macromedia Flash, программной анимацией можно управлять по ходу ролика.
Казалось бы, достаточно циклично изменять свойства объекта, например координату x и объект начнет движение, но это не так. Дело в том, что во Flash вначале выполняется программный код, а лишь потом происходит изменение, перерисовка экрана. Поэтому объект из начальной точки сразу перенесется в конечную, плавного движения не получится. Преодоление этого противоречия лежит в использовании трехкадровых циклов.
Их идея в следующем:
В первом ключевом кадре задаются начальные константы, начальное положение объекта.
Во втором ключевом кадре происходит изменение свойства объекта на какую-то заданную величину.
В третьем ключевом кадре находится всего одна команда перейти на второй кадр.
Не смотря на то, что явно цикл не задан, будет происходить циклическое изменение свойств. Выполнив программное изменение свойств во втором кадре, компьютер изменит положение объекта, а третий кадр «зациклит этот процесс.
Рассмотрим, как трехкадровый цикл реализуется на практике. Создадим ролик, в котором автомобиль движется от края до края листа, поворачиваясь в противоположную сторону и продолжая движение до бесконечности. У пользователя есть возможность изменять его скорость движения, замедляя или увеличивая его. Внешний вид ролика, разумеется без движения представлен на Рисунок 22. Ниже будет представлен разбор программного кода для реализации данного проекта.
Рисунок 22
Создайте на первом слое рисунок машины, или импортируйте уже готовый рисунок. Слой переименуйте в «машина», а ключевой кадр продлите до третьего кадра, нажав в третьем кадре клавишу F5.
Конвертируйте рисунок в символ, типа клип видеофрагмента. Дайте имя копии этого символа на плавающей панели «Копия», например, «car».
Создайте новый слой, переименуйте его в «кнопки» и создайте на нем две кнопки «быстрее» и «медленнее».
На новом слое «Действия» создайте три пустых ключевого кадра, три раза нажмите клавишу F7.
В первом ключевом кадре добавьте следующий код:
setProperty ("car", _x, 50);
Обратите внимание, данный код не взят в фигурные скобки и в начале не присутствует on (release), то есть данный код относится именно к кадру, а не кнопке. В данном фрагменте в первой строке у объекта под именем car устанавливается свойство _x (координата по оси x) значение 50. Далее вводится три переменных, вот их смысл: dx – величина единичного перемещение объекта, а также направление движение (смотри дальше), MinX и MaxX соответственно минимально и максимально возможная координата объекта. Вообще можно обойтись без этих переменных, но используя их значительно проще отлаживать ваш проект. Я думаю, более глубокое понимание возникнет при анализе дальнейшего кода.
Во втором ключевом кадре добавьте следующий код:
x = getProperty (car, _x);
‘ В переменной x сохраняется текущее положение объекта.
if (x<=MaxX) {
setProperty ("car", _xscale, -100);
‘ Конструкция из двух вложенных условных операторов. Первый проверяет dx>0. Если это так, то автомобиль движется вправо. Второе условие x<=MaxX проверяет не достиг ли автомобиль максимально возможной координаты. Если это так то изменяется координата x объекта «car». Если второе условие не выполняется, то максимальная координата достигнута, как результат масштаб по координате х изменяется на -100% (автомобиль переворачивается) и единичного перемещение объект изменяется на противоположное.
if (x>=MinX) {
setProperty ("car", _x, x+dx);
setProperty ("car", _xscale, 100);
‘ Вновь конструкция из двух вложенных условных операторов. их назначение аналогично предыдущим.
В третьем ключевом кадре добавьте следующий код:
gotoAndPlay (2);
Если вы сейчас запустите проект, то увидите что объект совершает движение вправо-влево. Добавим несложный код, увеличивающий и уменьшающий скорость.
Для изменения скорости нужно увеличить величину единичного перемещения объекта. Код, соответствующие кнопке «быстрее» приведен ниже:
on (release, keyPress "") {
‘ Если единичное перемещение положительно, то нажатие на кнопку увеличивает это перемещение на единицу. Обратите внимание, что тоже действие произойдет если вы нажмете на кнопку на клавиатуре «вправо».
Код, соответствующие кнопке «медленнее» приведен ниже:
on (release, keyPress "") {
Назначение аналогично предыдущему фрагменту. Вот и все. Запускайте проект, тестируйте его. Полученные знания мы применим в последнем проекте, который объединит в себе два предыдущих и получится игра.
Вопросы для повторения:
Почему программную анимацию невозможно реализовать с помощью обычного цикла «пока»? Поясните назначение каждого кадра в трехкадровом цикле. Поясните смысл переменной dx в описанном проекте. Для чего в программном коде присутствует строка setProperty ("car", _xscale, 100);? Добавьте к созданному пректу кнопку "остановить".
10. Проект «Интерактивная игра - Тир».
Цель проекта: Создать интерактивную игру тир. На игровом поле перемешается заяц (цель) в которого необходимо попасть с помощью перемещаемой мишени. Попадание необходимо произвести за минимальное кол-во шагов (высчитывается). Примерный вид экрана представлен на Рисунок 23.
Для реализации этого проекта вам необходимо создать объект цель (в данном случае, это импортированный рисунок зайца). Он должен совершать движения так же как автомобиль из предыдущего проекта. Также необходимо создать объект мишень и набор кнопок, которые перемещают данный объект вправо-влево и вверх-вниз. Также необходимо создать шесть динамических полей вывода. Два для вывода координат мишени, два для вывода координат цели, одно для вывода результата и одно для подсчета кол-ва попыток.
В принципе это – все тот же трехкадровый цикл. В первом кадре задаем начальные параметры:
z_x = random (450)+50;
z_y = random (230) + 50;
pr_x = getProperty (pr, _x);
pr_y = getProperty (pr, _y);
setProperty ("z", _x, z_x);
setProperty ("z", _y, z_y);
setProperty ("buh", _visible, 0);
d – точность попадания (подробней о этой переменной далее); h – единичный шаг перемещения «зайца»; rez – количество повторений, изначально данная переменная равна нулю; z-x и z-y – начальные координаты «зайца», они задаются с помощью стандартной функции Random, она вызывается с помощью команды Объектов – Математика - Произвольный в окне Действия кадра; далее свойства цели (объект «z») устанавливаются в полученные случайные координаты; и наконец в последней строке устанавливается видимость «выстрела» равной нулю, то есть до поры до времени объект «buh» невидим.
Рисунок 23
А ниже представлен код, соответствующий второму ключевому кадру:
z_x = getProperty(z, _x);
if (z_x>=max_x) {
setProperty ("z", _xscale, -50);
if (z_x<=min_x) {
setProperty ("z", _xscale, 50);
setProperty ("z", _x, z_x+h);
все в точности повторяет аналогичный код второго кадра из прошлой задачи.
В третьем кадре находится всего одна команда:
gotoAndPlay (2);
она позволяет «зациклить» движение цели.
Добавьте код для кнопок, перемещающих мишень вправо-влево, вверх-вниз. В качестве примера приведем код, для перемещения мишени вправо:
on (release, keyPress "") {
pr_x = getProperty (pr, _x);
setProperty ("pr", _x, pr_x + 10);
pr_x = getProperty (pr, _x);
в этом фрагменте команда pr_x = getProperty (pr, _x) повторяется дважды, это – не ошибка. Просто первый раз эта команда нужна для того, чтобы определить положение мишени до перемещения, а второй раз нам нужна новая координата мишени, чтобы при выстреле сравнивать ее с координатой цели.
Осталось добавить код для кнопки «огонь». Он представлен ниже:
on (release, keyPress "") {
‘ Вне зависимости от результативности выстрела переменная rez увеличивается на единицу.
setProperty ("buh", _x, pr_x);
setProperty ("buh", _y, pr_y);
setProperty ("buh", _visible, 1);
‘ Символ имитирующий «выстрел» перемещается в координаты где в данный момент находится мишень и его видимость становится равной единице.
tellTarget ("buh") {
gotoAndPlay (2);
‘ В проекте «выстрел» - это клип в котором проявляется красный круг. Для того, чтобы этого не происходило постоянно в первом и последнем кадре клипа стоит команда stop(). Команда TellTarget показывает компьютеру, что следующие в фигурных стрелках команды относятся только к объекту «buh» и выполняются в нем. Переходя во второй кадр тем самым запускается анимация внутри клипа «buh».
if (Math. abs (pr_x - z_x)
text = "Точно в цель!";
‘ В каком случае считать что мы попали в цель – в том случае, если разница между координатами цели и мишени меньше точности попадания (переменная d в первом кадре). Все дело втом, что одновременно выполняться оба условия идля координат x и для координат y, поэтому используется логическая связка И (смотри урок 4). И последнее, мы должны сравнивать модуль разности координат для этой цели используется стандартная математическая функция Math. abs (). Если все условия выполняются, динамическое поле «text» принимает значение "Точно в цель!" и ролик останавливается.
text = "мимо!";
Вот и все. Проект работает, цель бегает от нас, а текстовые поля отслеживают его положение. Мишень перемещается по полю, и результаты выводятся на экран. Можно поздравить себя мы прошли весь путь.
Вопросы для повторения:
Какие изученные технологии использованы в этом проекте? Какое назначение у команды tellTarget ("buh")? Что нужно изменить в программе, чтобы уменьшить поле движения зайца на 100 пикселей? Почему сравнивая координату цели и координату мишени, мы должны вычислять модуль данных координат? Как это реализуется во Flash? Предложите варианты усложняющие игру, предложите пути их реализации.
Мы только прикоснулись к программированию во Flash. Остались не затронутыми такие вопросы, как работа с массивами, мы не работали со звуком и с прокручиваемыми текстовыми полями, мы не работали с объектными переменными. В Flash еще много тайн и сюрпризов, их изучение – это отдельный разговор. Возможно у автора найдется время, чтобы описать и эти интересные аспекты.
Если вас заинтересовали эти первые уроки, заинтересовало программирование во Flash, то эти несколько ночей, что я описывал первые шаги в замечательной программе Macromedia Flash не пропали даром. Вы можете связаться со мной по E-mail, высказать свои пожелания и замечания, задать вопросы, но в любом случае спасибо, что вы дочитали этот текст.
Для получения. exe файла вы должны в программе Macromedia Flash создать Flash-ролик, опубликовать его (меню файл – публикация
). В результате у вас появляется файл с расширением. swf, просмотреть его можно либо с помощью программы Flash Player (устанавливается автоматически при установке Macromedia Flash. Откроете появившийся файл, выбирете меню файл – создание проектора,
задаете имя вашего. exe файла.
Не смотря на то, вы видите прямоугольник, как на рисунке, это – граница, при наборе она будет оставаться, но в самом ролике ее не будет видно.
Скорее всего, при попытке набрать текст русскими буквами у вас на экране появится «абракадабра». Это связано с тем, что по умолчанию в программе Flash стоит шрифт Times New Roman, в котором отсутствует описание кириллических символов. Поэтому перед набором установите шрифт, поддерживающий кириллицу, например, Times New Roman Cyr или Arial Cyr.
Если вы читаете электронный вид данного пособия, то вы можете скопировать данный фрагмент, а после вставить его через буфер обмена в окно действия кадра.
В четвертой версии Macromedia Flash было наложено ограничение на 20 000 повторений, при попытке выполнить большее кол-во циклов, компьютер во избежании зависания прекращал выполнение кода. Начиная с пятой версии ограничение снято, компьютер только выдает сообщение, что происходит замедление выполнения программы и дает возможность самостоятельно прекратить программу.
Для добавление нового ключевого кадра щелкните на кадре №2 в слое действия и нажмите клавишу F7. Flash создаст, новый пустой ключевой кадр.
Для импорта рисунка выберете команду Файл – Импорт из других форматов. Будьте внимательны, если в указанной вами папке находятся файлы названные однотипно, например. car1? car2 и т. д. то компьютер предложит их импортировать все сразу. Если вы импортируете векторный рисунок, он окажется на холсте в виде набора группированных объектов. Не забудьте его сгруппировать в единое целое. Если вы импортируете точечный рисунок, он автоматически помещается в библиотеку, а на сцене мы видим его копию.
Один из вариантов применения Flash-технологии - создание небольших приложений на стороне клиента. В статье в качестве примера рассматривается создание на Web-сайте калькулятора для расчета страховки автомобиля.
Фирма Macromedia ()
со своим Flash удачно уловила ожидания рынка и создала превосходный продукт.
Однако дело не в одной, пусть даже очень хорошей, программе. Сегодня жизнь часто
требует от профессионала в области информационных технологий выбирать средства
в зависимости от поставленной задачи, и иногда приходится буквально за несколько
дней осваивать новый язык или новый программный продукт. Предлагаемые ниже методики
решения некоторых задач в области создания Web-сайтов не требуют долгого изучения.
Опытный программист может сразу использовать эту методику в своих разработках.
Человеку, имеющему более скромный опыт программирования, потребуется некоторое
время для усвоения базовых концепций, после чего он сможет постепенно увеличивать
сложность своих разработок по мере приобретения опыта.
В этой статье мы рассмотрим весьма интересный вопрос применения Flash-технологии - создание небольших приложений на стороне клиента. Это может быть полезно как для программистов, так и для дизайнеров. Программисты часто неоправданно проходят мимо возможностей, открываемых Flash, поскольку уже имеют в своем распоряжении достаточно мощных средств. Дизайнеры иногда просто не догадываются, что Flash можно применять не только для создания intro, меню и красивых элементов дизайна сайта. Таким образом, эта статья - для тех, кто не ленится добавлять в свой арсенал новые средства и не боится браться за изучение новых инструментов.
Где применять Flash
В ходе строительства Web-узла постоянно приходится решать проблему выбора той или иной технологии. Окончательный выбор зависит, как правило, от двух факторов: поставленной задачи и арсенала средств, которым владеет разработчик или команда разработчиков.
Можно выделить три подхода к решению задач программирования для сети: либо приложение выполняется целиком на машине клиента, не обращаясь к серверу, либо такое приложение выполняет лишь часть операций, а прочие остаются серверу, либо практически всю работу выполняют серверные программы.
Решение некоторых задач на стороне сервера бывает предпочтительнее, а иногда просто не имеет альтернативы. Но программисты всегда стремились снизить нагрузку на сервер…
Итак, мы будем рассматривать построение клиентских приложений с помощью Flash. Обсудим, когда следует применять эту технологию, а когда лучше обратиться к традиционным методикам JavaScript, Java, VBScript.
Во-первых, нужно четко понимать, что Flash не создавался для программирования больших приложений. ActionScript четвертой версии весьма неуклюж с точки зрения любого сведущего в программировании. Основное его предназначение - управление последовательностью проигрывания фильма, подгрузка ресурсов с сервера, обработка взаимодействия фильма и пользователя. В этом языке отсутствуют средства создания и работы с массивами, обработка математических функций; весьма скромны средства работы со строками. В пятой версии язык кардинально изменился и стал похож на большинство других языков программирования для Интернета, но мы пока рассмотрим пример, выполненный на ActionScript четвертой версии, поскольку для начинающих программистов и Web-дизайнеров эта версия легче для понимания. В то же время переход на пятую версию при накоплении определенного опыта не вызовет проблем.
Итак, основную нишу в программировании клиентских приложений, в которой у технологии Flash нет конкурентов, можно определить как небольшие приложения с несложными математическими вычислениями и разбором текста, где требуется уникальный интерфейс, а время разработки ограничено. Это различные калькуляторы, экзаменующие системы, игры, средства для построения графиков, несложных чертежей (здесь мы не касаемся приложений, которые не могут обойтись без взаимодействия с сервером).
Применение Flash для таких приложений открывает для дизайнера массу возможностей (ограниченных только его фантазией) при создании пользовательского интерфейса. Вместо того, чтобы соединять несколько технологий в решении одной задачи, можно все делать в одной программе - редакторе фильмов Flash и тут же отлаживать полученный результат. Причем, по данным фирмы Macromedia, у почти 95% пользователей Интернета уже установлен плейер для воспроизведения flash-фильмов. А теперь перейдем к рассмотрению конкретного примера, на котором можно продемонстрировать применение технологии Flash для разработки конкретного приложения.
Постановка задачи
В качестве примера мы создадим калькулятор для расчета страховки автомобиля. Когда разрабатывался сайт одной страховой компании, клиенты, в частности, высказали пожелание сделать калькулятор для быстрого расчета размера страхового платежа при страховании автотранспорта, стоимости полиса гражданской ответственности и некоторых видов имущественного страхования. Мы рассмотрим только первую задачу - расчет страховки автомобиля (второй случай гораздо проще и не так интересен).
Анализ условий задачи показал, что, несмотря на значительное количество оговорок и исключений, схема расчета страховки автотранспорта достаточно четко выверена и легко поддается алгоритмизации.
При выборе инструмента реализации были приняты во внимание следующие обстоятельства.
- Математические вычисления были достаточно просты и сводились к выполнению
арифметических операций, проверкам условий, округления до целого и т.п.
- Желательно было уйти от традиционного интерфейса анкетных форм, преобладающего
в сети. Нужно было дать пользователю возможность "поиграть" с интерфейсом,
изменяя исходные значения расчета столько раз, сколько он пожелает, и получая
результат немедленно. Все ошибки желательно было обрабатывать тут же.
- Желательно было обойтись без взаимодействия с сервером при выполнении вычислений.
- Естественно, сказался и тот фактор, что автор этих строк был уже достаточно
хорошо знаком с технологией Flash и имел опыт программирования на ActionScript.
Возможность создать вполне независимое приложение с уникальным интерфейсом выглядела так заманчиво, что долго колебаться в выборе инструмента не пришлось. Итак, мы выбрали Flash.
Создание приложения
Структура программы и алгоритм
Общий вид расчетной формы для определения стоимости страховки показан на рис. 1. Тарифные ставки различаются в зависимости от вида страхуемых рисков, условной группы автомобиля (отдельно для отечественных и импортных автомобилей) и срока его эксплуатации; у страховой компании они обычно сведены в таблицу. Это основные данные, необходимые для расчета страхового платежа.
Рис. 1. Общий вид формы для расчета страховки автомобиля.
Пользователь при расчете выбирает из списка марку своей автомашины, вводит срок эксплуатации машины (год выпуска), выбирает риски в любой комбинации либо весь пакет рисков (автокаско).
Рис. 2. Выбор марки автомобиля.
Соответствующее окно меню показано на рис. 2. Для упрощения выбора и скрытия внутренней логики программы применим для каждой марки машины свою кнопку. При нажатии на эту кнопку выполняется следующий код:
On (Release)
Begin Tell Target ("/")
Set Variable: "AvtoTypeText" = "ВАЗ 2115"
Set Variable: "CarsGroup" = 1
End Tell Target
Go to and Stop (HideWin)
End On
|
Здесь сразу устанавливается переменная AvtoTypeText, которая позднее используется для вывода в динамическое текстовое поле для отображения выбранной марки. Кроме того, устанавливается группа, в которую попадает автомобиль. Эти операторы заключены в блок Tell Target. Знак "/" говорит о том, что переменные находятся в основном слое, который содержит все остальные клипы.
Оператор Go to and Stop(HideWin)
устанавливает форму в невидимое состояние
после нажатия кнопки, т. е. нажатие кнопки одновременно закрывает окно. Это
оправданно, так как выбор марки автомашины однозначен.
Создание уникальных элементов интерфейса
Здесь следует немного пояснить для тех, кто мало знаком еще с flash-программированием: один из основных приемов этой технологии - использование устойчивых состояний клипа. Определений терминов мы давать не будем, они есть в файлах Справки и в учебниках.
Итак, для использования устойчивых состояний необходимо создать несколько ключевых
фреймов - по числу состояний. В каждом фрейме располагаем элементы, которые
должны быть видны в этом состоянии. Если элементов во фрейме нет, это соответствует
невидимому состоянию клипа. Кроме того, в каждом ключевом фрейме необходим оператор
Stop
. Наличие этого оператора не позволит клипу проигрываться, и он будет
стоять в выбранном кадре столько, сколько нужно по логике программы.
В примере с меню выбора марки автомобиля в первом кадре окно видимо вместе
со всеми кнопками. В это состояние клип устанавливается при нажатии на кнопку
выбора марки автомашины в главном окне. Второй кадр имеет в свойствах установленную
метку (Label) с именем HideWin
и не содержит никаких объектов. Делая
переходы оператором Go to and Stop
, мы можем управлять видимостью меню
из любого места нашего flash-фильма.
Из рис. 3 видно, что данный клип содержит два слоя. Объекты и код разнесены по разным слоям просто для удобства. Никакого влияния на отработку программы это не оказывает.
Рис. 3. Объекты и код разнесены по разным слоям.
Раз уж зашла речь об устойчивых состояниях, то сразу укажем еще один объект, в котором используется этот прием. Это переключатель (элемент CheckBox). В данной программе их довольно много. Реализуется такой элемент очень просто, и при этом дизайнерские возможности придания этим элементам уникального внешнего вида безграничны, в отличие от других технологий.
Для создания переключателя нужно создать два объекта типа Button. Каждый из них будет представлять одно из устойчивых состояний переключателя (рис. 4).
Рис. 4. Два состояния кнопок переключателя.
Этих состояний может быть и более двух - столько, сколько нужно. Далее создается
простой клип по описанному выше принципу - два ключевых фрейма с операторами
Stop
. Помещаем наши кнопки в разные фреймы и задаем внутри этих кнопок
короткий код:
On (Release)
Play
End On
Это все. При нажатии на любую из кнопок будет происходить переход на один фрейм. Внешний вид клипа будет соответственно меняться. Во фреймах клипа можно устанавливать какую-либо переменную, хранящую состояние переключателя, например: checked=1 для выделенного и checked=0 для невыделенного состояний. Это будет локальная переменная для клипа. Для доступа к ней из других клипов нужно указывать полный или относительный путь. Если использовать значение внутри клипа, то достаточно указать только имя.
Принцип устойчивых состояний используется для всех диалоговых окон программы и для элементов выбора, подобных стандартным элементам CheckBox и RadioButton.
Вернемся к алгоритму нашей программы. Здесь как раз используются переключатели, которые мы только что рассмотрели. Окно для выбора рисков страхования содержит пять таких переключателей; каждому риску соответствует свой переключатель (рис. 5).
При выборе позиции автокаско все остальные флажки сбрасываются. Выбор четырех рисков (т. е. всех, кроме автокаско) приводит к выделению позиции автокаско и сбросу всех остальных. В данном примере обновление выполняется после закрытия окна; иными словами, вся эта логика пользователю не видна, а весь код обработки различных ситуаций собран в одной кнопке закрытия окна. Можно было сделать изменение статуса видимым немедленно, распределив код по переключателям. Здесь переключатели имеют смешанное поведение - как CheckBox, так и RadioButton, и возможен любой вариант. Второй вариант применен в другом диалоговом окне ("Место хранения автомобиля"). Там все состояния взаимно исключают друг друга, и переключатели ведут себя как RadioButton.
Рис. 5. Окно для выбора рисков с пятью переключателями.
Ниже приведен полный код кнопки на панели выбора рисков:
Здесь все довольно просто, и код понятен даже для начинающих. Вначале устанавливается значение строчной переменной /:InsStr, которая связана с тестовым динамическим полем, отображающим выбранные риски. Если никаких рисков не выбрано, то это и будет значение строки после закрытия формы. Если выбор сделан, что определяется суммированием флагов по всем рискам и проверкой переменной klop, то /:InsStr присваивается пустая строка, к которой будут добавляться строки, соответствующие выбранным рискам. Это делается в блоках If () … End If. Затем проверяется случай выбора всех рисков, и устанавливается корректное положение флагов переключателей. При новом открытии диалогового окна переключатели будут уже в новом состоянии. Это делается каждым переключателем самостоятельно по значению его флага (переменные /:CheckUgon, /:CheckDTP, /:CheckBurst, /:CheckCrim).
Далее идет уже знакомый оператор перехода, который закрывает окно. И, наконец,
кое-что новое - в изолирующем блоке Tell Target() вызывается оператор Call()
в главной хронометрической линейке. Это вызов процедуры. Во Flash он имеет несколько
особенностей относительно других языков. Во-первых, процедуры привязаны к фреймам,
и код процедуры - это код некоего фрейма. Во-вторых, оператор call
не
передает параметров. Выражение в скобках - это метка фрейма с кодом процедуры.
В-третьих, оператор call
не влияет на проигрывание фильма в процессе
выполнения. Все переходы будут выполнены только после отработки всех кусков
кода в данном временном срезе. Перехода на фрейм с кодом тоже не происходит.
Проигрыватель фильма стоит на том же кадре, где он был до вызова процедуры.
Данная же конкретная строка очищает окно результата при любой попытке изменения исходных данных для расчета.
Рассматривать подробно другие диалоговые окна нет необходимости. Их код проще
вышеприведенного. Лишь перечислим эти окна и кратко скажем об их содержимом.
- Окно "Место хранения автомобиля" содержит три переключателя, работающих
по типу RadioButton, и кнопку закрытия окна.
- Окно "Противоугонные средства" содержит три переключателя типа CheckBox
и кнопку закрытия окна.
- Окно "Страховая история" (сколько лет страховался клиент ранее без страховых
случаев в любых страховых компаниях) содержит текстовое поле и кнопку закрытия
окна.
- Окно "Ошибка" выводит сообщение об ошибках и недопустимых значениях введенных
данных. Текст описания исключительной ситуации присваивается динамическому
текстовому полю.
- Окно сообщения об успешном выполнении расчета с инструкцией по распечатке
формы.
Для ввода некоторых параметров окна не нужно - это год выпуска автомобиля, водительский стаж, оценка стоимости автомобиля и срок действия страховки. При вводе в текстовые поля нужно делать проверки корректности данных и соответствия числа заданному диапазону, что определяется исходными условиями. Например: срок страховки может быть только целым, не меньше 1 и не больше 12 (месяцев). Эти проверки выполняются простыми условными операторами и с применением функции округления int(). Если значение выходит за пределы допустимого, то присваивается некое значение по умолчанию. Так мы избегаем получения заведомо неверных результатов.
Особенности реализации
Теперь рассмотрим еще один важный момент. Где мы храним значения тарифов? Дело в том, что Flash версии 4 не имеет конструкций для описания массивов. Выход - либо хранить данные в простых переменных, либо пытаться эмулировать массивы. Массивы удобны при использовании циклов. В данном случае циклов нет, и можно обойтись обычными переменными. Способ не очень изящный, но простой и надежный. Переменные инициализируются при запуске приложения в первом фрейме основной временной линейки (в самой сцене). Есть еще один способ описания переменных - в текстовом файле. Данные записываются в простой форме:
Var01="value01"&var02="value02"&var03="value03"
Это соответствует обычной записи вида "ключ=значение". Файл загружается оператором
Load variables
("filename.txt", "/targetClip").
Тут надо сказать несколько слов о формировании имен переменных. Формирование однотипных имен важно, если необходимо использовать некие числовые индексы для обращения к той или иной переменной. Как уже говорилось, Flash 4.0 не позволяет создавать массивы, но этот недостаток можно обойти. Будем формировать имена динамически. Скажем, в строке ДТП назовем переменные DTP1, DTP2…DTP12. Назначить эти переменные можно обычным способом:
Set variable "DTP1"=6
и аналогично для всех остальных. Но чтобы извлечь значение, зная строку и номер колонки, придется сделать так:
Set variable "Temp"=eval("DTP"&n)
где n - это номер колонки. Это совершенно равнозначно выражению:
Set variable "Temp"= DTP1
Осталось немного - чистая арифметика. Код разбивается по нескольким фреймам-процедурам,
к которым обращаемся через оператор call
. Все эти фреймы находятся в
самой сцене. Имея номер группы и срок эксплуатации, определяем номер колонки
в таблице тарифов. Далее проверяем отмеченные риски и суммируем значения тарифов.
Делаем проверки выполнения условий для скидок, зависящих от места хранения и
наличия противоугонных систем) и выбираем соответствующий поправочный коэффициент.
Далее учитывается срок безубыточного страхования и выполняется проверка на выход
за пределы диапазона (в данном случае не более 30%). Остается все перемножить
и получить результат. Все вызовы процедур call() сосредоточены в кнопке "Посчитать".
Если все необходимые данные были корректны, в окне результата появляется значение страхового платежа. Если где-то была допущена ошибка, то появится окно предупреждения об исключительной ситуации. При этом в некоторых случаях все равно будет получен результат: например, если числовые данные были введены неверно, и программа подставила значение по умолчанию. После этого достаточно правильно ввести нужное значение и снова нажать кнопку "Посчитать".
Немного о серверных скриптах
В приведенной выше форме есть также счетчик проведенных расчетов. Это программа на языке Perl. Поскольку она не имеет отношения к логике программы и ее можно безболезненно удалить, то мы не будем здесь рассматривать такую дополнительную функциональную возможность, как взаимодействие с серверными скриптами. Принципиальных сложностей в этом нет, однако взаимодействие с серверными скриптами - отдельная большая тема, и в ней масса своих тонкостей.
Распечатка результата
При отсутствии ошибок появляется окно с сообщением об успешном проведении расчета и подсказка - как пользователю распечатать форму на принтере. При распечатке используется возможность, предоставляемая проигрывателем flash-фильмов или самим браузером. Распечатка из контекстного меню по правой кнопке мыши дает лучший результат при передаче оттенков, что особенно заметно при наличии градиентных заливок. С этой распечаткой пользователь может придти в офис компании и оформить страховку.
Результат
Мы полностью выполнили поставленную задачу средствами Flash 4.0, не используя никаких дополнительных технологий для основной логики программы. Полностью функциональное приложение имеет объем около 40 Кбайт и после загрузки не требует никакой связи с сервером. Число расчетов неограниченно. Пользователь может сколько угодно менять исходные данные и получать результаты немедленно. Потенциальная аудитория, которая сможет воспользоваться этой программой, составляет около 95% пользователей Интернета. И при этом мы практически избавлены от конфликтов версий браузеров, систем, платформ. Технология Flash - это на сегодня технология одного производителя, что упрощает задачу разработчика. Интерфейс формы совершенно уникален, и при этом издержки на графическую часть минимальны. Полагаю, что плюсов достаточно, чтобы использовать и в дальнейшем для подобных задач технологию Flash от Macromedia.
Если Вы работаете с Flash
и используете его пока что только для рисования и простой анимации, создание роликов или баннеров, но ни разу не занимались программированием в нём, то вероятно Вам очень хотелось узнать эту сторону flash-а
.
Что такое ActionScript
? Как можно писать код на flash-е
? Как можно полноценно программировать во flash
? Какие инструменты для этого лучше всего использовать? В данной статье приводятся ответы на подобные вопросы.
Эта статья послужит хорошим руководством новичка в программировании под flash
на ActionScript 3.0
и поможет выбрать лучшие инструменты для этого.
Что такое ActionScript?
Action Script
— это объектно-ориентированный язык программирования, который добавляет интерактивность, обработку данных и многое другое в содержимое Flash-приложений.
С помощью Action Script можно создавать интерактивные мультимедиа-приложения, игры и веб-сайты.
Если Вы работаете с графической средой разработки Flash IDE
(например Adobe Flash Professional CS5), но ни разу не интересовались где там можно писать программный код, то вероятно Вас уже волнует вопрос «Где же он прячется, этот AS3?».
AS3 во Flash IDE.
Создадим новый проект File — New — ActionScript 3.0 (рис. 1).
Рис 1. Создание нового проекта AS3.
Появится пустая сцена с пустым кадром на одном слое. Теперь можно выделить кадр и нажать F9
, тем самым открыть окно «Actions», в котором и находится область редактирования программного кода данного кадра.
Давайте напишем в открывшемся окне следующий код:
ActionScript
var s: String = "its my AS3 code trace!";
trace(s);
|
var
s
:
String
=
"its my AS3 code trace!"
;
trace
(s
)
;
|
Рис. 2. Код, написанный в редакторе Flash IDE.
Теперь можно запускать флешку (Ctrl+Enter
). Данный код создаёт переменную s
типа String
(строка) и присваивает ей начальное значение — строку «its my AS3 code trace!
«. Далее, функцией trace()
, аргументом которой выступает ново созданная переменная, данная строка (а точнее уже значение переменной s
) выводится во вкладку output
, которая по умолчанию в интерфейсе IDE располагается рядом с вкладкой timeline
.
Таким образом можно открывать и закрывать(на F9) редакторы кода для любого кадра флеш-приложения.
Вроде картина выходит не плохая — можно создавать разные объекты с анимациями (MovieClip
), либо статичные картинки (Sprite
) и у каждого объекта будут кадры и в каждом кадре можно запрограммировать всё что угодно. Выглядит удобно и гибко. Но это лишь на первый взгляд. Представьте что у Вас десятки объектов с десятками кадров и всем им нужно описать кодом различную или схожую логику поведения. Во втором случае (схожая логика) — это вообще означает сотни схожих строк кода, которые можно будет замучиться даже копировать из кадра в кадр. А представьте что в процессе разработки вам понадобится что-то изменить. Нет — это не дело! Не для этого хаоса был задуман язык AS3!
В добавок, если Вы поработаете редактором кода Flash IDE и, к примеру, работали в какой-нибудь другой среде программирования (Delphi, Visual Studio), то сразу заметите, что данный редактор, мягко говоря, удручает своей не удобностью и недоделанностью.
Что же делать, спросите Вы? Искать сторонние редакторы кода.
Альтернативные редакторы кода.
Самый лучший вариант для ОС Windows — это FlashDevelop
(FD). Скачать свежую версию можно с сайта .
Для iOS хорошей альтернативой является FDT
. Ознакомиться можно на оф. сайте .
FlashDevelop.
Т.к. я на данный момент преимущественно обитаю в Windows, то расскажу о редакторе именно под эту ОС. В будущем, когда наберусь опыта в FDT, то напишу и о нём.
В установке нет ничего сложного, качайте свежую версию с оф. сайта и устанавливайте. Редактор совершенно бесплатный и для компиляции использует Flex SDK. Во время стандартной установки FD сам позаботится об установке последнего. Всё что надо установить для FD самому — это Java
.
FD имеет массу удобств и особенностей среди которых: горячие клавиши, хорошая авто подстановка, шаблоны классов, возможность создавать свои шаблоны и редактировать имеющиеся.
После установки можно создать новый проект (Project — New Project…), откроется диалог создания проекта, как показано на рис. 4.
Как можно заметить, FD позволяет создавать не только AS3 проекты. Но сейчас нас интересует именно AS3 проект, я предпочитаю выбирать заготовку для проекта с Preloader
-ом, который и выбран на рис. 4
. Далее введите имя проекта (поле Name
) и назначьте директорию проекта (поле Location
), если стоит галочка «Create directory for project»
, то в директории Location будет создана папка с именем проекта (Name) и в неё уже поместятся файлы проекта, если галочка не стоит, то файлы поместятся в указанную директорию Location.
После создания проекта справа Вы увидите структуру файлов и папок проекта, откройте папку src
и откройте двойным щелчком файл Main.as
. После чего Вы должны наблюдать код примерно такой же, как на рис. 5.
Попробуем написать какой-нибудь код, например примерно тот же, который пробовали в Flash IDE
. Писать можно после комментированной строки «// entry point»
т.к. это точка где сцена уже точно создана. напишем команду trace()
, на рис. 5. я уже позволил себе это деяние:]
Теперь можно скомпилировать проект (F8
) или сразу запускать для тестирования (F5
), после запуска в окне Output
вы увидите результат работы функции trace()
— вывод строки.
Результаты команды trace()
можно наблюдать только во время запуска приложения из под IDE, в которой компилируется и запускается код.
При запуске файла.swf в браузере или в обычном flash-плеере результат (а т.е. отображение окна output) не будет виден никому.
Теперь я уверен, что Вам уже не терпится сделать свой первый проект на AS3! А для этого нужно приступить к изучению самого языка.
Изучение языка AS3.
Про AS3 можно конечно писать много, но лучше чем в книгах я вряд ли напишу, тем более что всё уже написано, поэтому моё дело посоветовать лучшую литературу отталкиваясь от своего опыта.
Лучшая книга: Колин Мук
— .
Хорошее дополнение к знаниям: Джои Лотт
— .
Читал в своё время ещё такую книгу: Рич Шуп
— . Написано хоть и не сильно много и подробно, но для новичков сойдёт, если под рукой нет Мука.
Этих книг весьма достаточно для бодрого старта! Читайте и практикуйтесь, практикуйтесь и читайте. Нет необходимости сесть и читать эти книги от корки до корки, т.к. в процессе чтения важно закреплять знания практикой, да и Вам самим будет приятно сделать что-нибудь как можно скорее:]
Во время быстрого поиска документации в инете очень помогает оф. документация от .
Для дальнейшего развития, для хорошего осознания ООП и шаблонов проектирования (а это очень важно для хорошей ООП структуры) Вам будет незаменима следующая книга: Уильям Сандерс, Чандима Кумаранатунг
— .
На этом сайте вы так же найдёте не мало аспектов программирования на AS3, накопленных моим опытом.
Или попробовать сделать свой первый прелоадер прочитав статью: Preloader своими руками.
Всего доброго и успешных проектов!
Не думайте, что изучив главу "Введение в ActionScript" и главу "Элементы ActionScript" для создания игр", вы уже научились программировать. Существует разница между умением создавать код на ActionScript и опытом программирования.
Большинству людей программирование дается трудно, мне легко. Но у меня научная степень по вычислительной технике и я занимаюсь программированием уже 18 лет. Не имея аналогичного опыта, не следует ожидать быстрых результатов.
Вот некоторые принципы, руководствуясь которыми, вы сможете научиться программировать. Как и любой навык, программирование требует времени для изучения. Вы обнаружите, что чем больше вы программируете, тем легче оно вам дается.
Анализ задачи
Программирование представляет собой процесс. Большая программа может быть разбита на части. Эти части могут быть разбиты на еще более мелкие части и т. д. Для того чтобы написать программу, необходимо рассмотреть поставленную перед вами задачу и решать ее по частям.
Предположим, вы хотите создать игру Space Invaders
(Космические захватчики). Это сложная задача. Однако, разбив ее на небольшие части, вы поймете, что решить ее довольно просто.
Прежде всего, подумайте, из каких элементов будет состоять ваша игра: корабль игрока, захватчики, снаряды, которыми стреляет корабль, а также снаряды, которыми стреляют захватчики.
Теперь возьмите один из этих элементов и подумайте, какие действия будут с ним происходить. Корабль игрока перемешается по горизонтали вдоль экрана при помощи клавиш с изображением стрелок. Это уже более выполнимая задача.
Продолжайте ваши рассуждения дальше. Как вы узнаете, что пользователь нажал на клавишу с изображением левой стрелки? Как перемещаете корабль влево? А как насчет клавиши с изображением правой стрелки и перемещения корабля вправо? Решив эти небольшие задачи, вы решите большую задачу перемещения корабля. После этого можете переходить к следующей части программы. Этот процесс требует терпения, которое является неотъемлемым аспектом программирования. Следует проявить терпение и по отношению к себе. Пока вы не стали экспертом в ActionScript, вам придется время от времени отвлекаться от программирования, чтобы посмотреть какую-либо еще неизвестную вам команду или изучить новый материал. Вы не сможете писать сложные программы, не восполнив некоторые пробелы в ваших знаниях.
Важно осознать, что если задача кажется слишком большой, чтобы с ней справиться, по-видимому, она таковой и является. Разбейте ее на более мелкие задачи, и вы найдете решение.
Правила программирования
Во время изучения программирования следует придерживаться некоторых правил, которые помогут облегчить вашу работу. Эти правил выполняют программисты всего мира, использующие все языки программирования:
- комментарии
- следует приобрести привычку добавлять к коду комментарии. Даже строки, кажущиеся ясными в данный момент могут стать непонятными, если вы вернетесь к ним через месяц;
- имена переменных
- используйте имена переменных, отражающие их назначение. Они дополнят комментарии и помогут понять код, когда вы вернетесь к нему позднее;
- имена функций
- все вышесказанное относится и к именам функций. Они должны описывать выполняемые ими действия;
- чем короче, тем лучше
- во Flash нет ограничения на длину функции. Тем не менее, если вы напишите функцию длиной в 100 строк, позднее вам будет непросто ее редактировать. Лучше разбить функцию на задачи и поместить каждую задачу в отдельную функцию;
- включайте в код многократно используемые функции
- во время программирования не забудьте подумать о том, как можно применить ту или иную функцию к схожей или аналогичной задач другой части вашей программы. Допустим, вам необходима функция, добавляющая одно очко к счету игрока. Постарайтесь использовать в ней параметр, позволяющий добавлять к счету не только одно, но и любое другое количество очков;
- старайтесь обходиться без жесткого кодирования
- под жестким кодированием подразумевается включение в ваш код конкретных чисел. Допустим, для описания правой стороны рабочего поля в вашем коде используется значение 550, оно будет жестко закодировано в программу. Если вы решите расширить рабочее поле ас 600 пикселов, вам придется изменять каждое употребление значения 550 в коде. Лучше в самом начале задать переменной под названием screenRightSide значение 550 и использовать эту переменную на протяжении всей программы;
- хорошая организация
- хороший программист, несомненно, должен уметь организовывать различные элементы программы. На-пример, функции следует помешать не в разные кадры, а в один кадр вашего ролика. Кроме этого, старайтесь сгруппировать функции согласно выполняемым ими задачам.
Отладка
Всем программистам приходится отлаживать создаваемые ими программы. Невозможно добиться безупречной работы программы при ее первом запуске. Хороший специалист должен уметь отлаживать программу.
Помимо использования отладчика ActionScript
, отладку можно производить различными способами. При пробном воспроизведении ролика в окне Output
могут появляться сообщения об ошибках. Иногда этого достаточно, чтобы вы поняли, в каком месте кода у вас проблемы.
Информация о программе может также размещаться в окне Output
при помощи команды trace
. Она поможет вам отследить определенные моменты программы и значение некоторых переменных в эти моменты.
Если же вы хотите воспользоваться программой отладки, советуем вам изучить соответствующую информацию в руководстве по Flash MX. Программа отладки является простым инструментом, позволяющим отображать значения переменных во время воспроизведения Flash-ролика. Однако она не в состоянии творить чудеса; программа отладки может только помочь вам разобраться в собственном проекте.
Тестирование
Следующим этапом отладки является тестирование ваших игр другими людьми. Тестирование является важным аспектом, особенно, если игра разрабатывается вами на профессиональном уровне. Будучи программистом, вы не сможете объективно оценить работу своего детища и его недостатки.
Вы наверняка узнаете много нового, когда кто-нибудь в первый раз начнет играть в вашу игру. Вы даже и не представляли себе, что он будет щелкать по таким элементам. Он может перетаскивать элементы за пределы рабочего поля или помешать туда, где их не должно быть.
Обычно перед официальным представлением широкой аудитории игра проходит два этапа проверки. На первом этапе (альфа-тестирование) игра тестируется вашими коллегами или друзьями. Бета-тестирование осуществляется людьми, не имеющими отношения к вашей компании или сети. На обоих этапах вы должны получать сообщения об обнаруженных проблемах и по мере их исправления выпускать обновленные варианты игры.
К сожалению, часто при синтаксически верном коде программа выдает неожиданные результаты. Например, поскольку Flash не нуждается в специальном объявлении переменных, то он запросто съест имя несуществующего объекта (вы вполне могли ошибиться при вводе имени) и будет честно выполнять все назначенные ему действия.
Дефектами программы считаются не только ошибки, но и несоответствующее содержание игры, и отсутствующие функции. Постарайтесь максимально усовершенствовать свою игру, прежде чем заявлять о том, что она закончена.
Поскольку ActionScript является языком программирования, для его изучения необходимо понимание ряда основных концепций, используемых при создании компьютерных программ.
Какие функции выполняют компьютерные программы
Прежде всего необходимо понять, что представляют собой компьютерные программы и какие функции они выполняют. Существует два основных свойства компьютерной программы.
Программа представляет собой серию инструкций или шагов, которые должен выполнить компьютер.
Каждый шаг в конечном счете приводит к управлению определенной порцией информации или данных.
В общем смысле, компьютерная программа - это пошаговые инструкции, которые задаются компьютеру оператором и которые компьютер выполняет одну за другой. Каждое отдельное указание называется инструкцией
. В среде ActionScript после каждого оператора следует точка с запятой.
В сущности, все функции отдельной инструкции программы сводятся к управлению несколькими битами информации, хранящимися в памяти компьютера. Простым примером является сложение двух чисел и сохранение результата в памяти компьютера. Более сложным примером является рисование прямоугольника на экране компьютера и создание программы перемещения этого прямоугольника в другое место экрана. Определенная информация о прямоугольнике сохраняется в памяти компьютера: координаты x, y расположения прямоугольника, ширина и длина сторон, цвет и так далее. Каждый бит этой информации хранится в памяти компьютера. Алгоритм программы перемещения прямоугольника в другое место на экране включает такие действия, как присвоение координате x значения 200, а координате y - значения 150. Другими словами, необходимо присвоить новые значения координатам x и y. Компьютер выполняет некоторые скрытые от пользователя операции с этими данными для фактического преобразования этих чисел в изображение, показанное на экране компьютера. Однако на базовом уровне достаточно знать то, что процесс перемещения прямоугольника на экране включает только изменение битов данных в памяти компьютера.
Переменные и постоянные
В основном процесс программирования включает изменение только части данных в памяти компьютера. Следовательно, важно иметь способ представления части данных в программе. Переменная
является именем, которое представляет значение в памяти компьютера. При записи операторов для управления значениями имя переменной записывается вместо значения. Когда компьютер обнаруживает имя переменной в программе, он обращается к своей памяти и использует то значение, которое там находится. Например, если есть две переменные с именами value1 (значение 1) и value2 (значение 2), каждая из которых содержит число, тогда для сложения этих чисел можно написать следующую инструкцию:
Value1 + value2
При выполнении этих шагов на практике компьютер находит значения для каждой переменной и складывает их.
В ActionScript 3.0 переменная фактически состоит из трех различных частей:
имени переменной
типа данных, которые могут быть сохранены в переменной
фактического значения, сохраненного в памяти компьютера
Было рассмотрено, как компьютер использует имя в качестве местозаполнителя значения. Столь же важен и тип данных. При создании переменной в среде ActionScript задается определенный тип данных, предназначенный для хранения. С этого момента при выполнении программных команд в переменной могут сохраняться значения только этого типа данных. Можно управлять значением с использованием определенных характеристик, связанных с этим типом данных. Для создания переменной в ActionScript (этот процесс называется также объявлением или заданием
переменной) используется инструкция var:
Var value1:Number;
В этом примере определены команды создания переменной value1 , в которой могут храниться только значения с типом Number. (Number - это определенный тип данных в среде ActionScript.) Можно также сохранить значение прямо в переменной:
Var value2:Number = 17;
Adobe Flash Professional
Во Flash Professional есть другой способ задания переменной. При размещении символа фрагмента ролика, символа кнопки или текстового поля в рабочей области можно задать для них имя экземпляра в инспекторе свойств. В скрытом для пользователя режиме приложение Flash Professional создает переменную с именем, которое совпадает с именем экземпляра. Это имя можно использовать в коде ActionScript для представления этого элемента в рабочей области. Предположим, к примеру, что в рабочей области существует символ фрагмента ролика и вы присваиваете ему имя экземпляра rocketShip . При использовании переменной rocketShip в коде ActionScript вы фактически управляете фрагментом ролика.
Константа
аналогична переменной. Это имя, которое представляет значение с заданным типом данных в компьютерной памяти. Разница состоит в том, что для постоянной значение присваивается только один раз во время выполнения приложения ActionScript. Если постоянной присвоено значение, оно больше не изменяется в приложении. Синтаксис для определения константы почти совпадает с синтаксисом для определения переменной. Единственным отличием является то, что ключевое слово const используется вместо ключевого слова var:
Const SALES_TAX_RATE:Number = 0.07;
Константа используется для определения значения, которое задействовано на многих стадиях проекта и которое не изменяется при нормальных обстоятельствах. Использование постоянных вместо литеральных значений делает код более удобочитаемым. К примеру, рассмотрим две версии одного кода. Один код используется для умножения цены на значение переменной SALES_TAX_RATE . Другой код используется для умножения цены на 0,07 . Версия, в которой используется константа SALES_TAX_RATE , более проста в понимании. Кроме того, предположим, что значение, заданное константой, изменяется. Если для представления значения в проекте используется константа, можно изменить значение в одном месте (объявление константы). Напротив, потребуется изменить его в различных местах при использовании запрограммированных значений литералов.
Типы данных
В ActionScript существует много типов данных, которые можно использовать при создании переменных. Некоторые из этих типов данных считаются простыми или фундаментальными типами данных:
Строки: текстовые значения, такие как имя или текст главы книги
Числовые: ActionScript 3.0 включает три специфических типа числовых данных:
Number: любые целые или дробные числовые значения
int: целые числа без дробей
uint: беззнаковые (неотрицательные) целые числа
Логические: значения типа «истинно - ложно», такие как состояния выключателя или равенство или неравенство двух значений
Простые типы данных представляют единичные порции информации: например, одно число или единичный текст. Однако большинство типов данных, определенных в среде ActionScript, являются комплексными типами данных. Они представляют набор значений в одном контейнере. Например, переменная с типом данных Date (Дата) представляет одно значение (момент времени). Тем не менее, значение даты включает несколько значений: день, месяц, год, часы, минуты, секунды и т. д., все из которых являются отдельными числами. Обычно дата считается единичным значением, и с ней можно работать как с единичным значением путем создания переменной Date. Однако в компьютере дата рассматривается как группа из нескольких значений, которые совместно определяют одну дату.
Большинство встроенных типов данных, так же как и большинство типов данных, задаваемых программистами, являются комплексными. Некоторые из комплексных типов данных, возможно, уже вам знакомы:
MovieClip: символ фрагмента ролика
TextField: динамическое или вводимое текстовое поле
SimpleButton: символ кнопки
Date: информация о единичном моменте времени (дата и время)
Двумя широко распространенными синонимами для обозначения типа данных являются класс и объект. Класс
является просто определением типа данных. Он равнозначен шаблону всех объектов в типе данных, как в выражении «все переменные типа данных "Пример" имеют характеристики А, Б и В». Объект
, с другой стороны, является всего лишь фактическим экземпляром класса. Например, переменную с типом данных MovieClip можно описать как объект MovieClip. Ниже одна и та же мысль выражена различными словами.
Типом данных переменной myVariable является Number (число).
Переменная myVariable является экземпляром Number.
Переменная myVariable является объектом Number.
Переменная myVariable является экземпляром класса Number.