Среда разработки Flash5/MX


Назад

  • Введение в ActionScript
  • Объекты Array
  • Объекты Movie Clip

    Введение в ActionScript

    ActionScript - это объектно-ориентированный язык написания сценариев во Flash. Он применяется для управления объектами или добавления в фильмы Flash интерактивности (возможностей взаимодействия с пользователем). Сценарии ActionScript могут быть встроены в экземпляры видеоклипов, кнопок и кадров.

    ActionScript - модульный язык программирования, т.е. сценарии на этом языке являют собой небольшие относительно автономные модули, выполняющие строго определённые функции. Программа на ActionScript состоит из коротких сценариев, относящихся к отдельным кнопкам, клипам и кадрам.

    В простейшей форме сценарий ActionScript представляет собой набор простых команд (инструкций) для управления проигрывателем Flash. Выполнение сценария происходит при наступлении определённого события (нажатие клавиши на клавиатуре, движение мыши и т.п.). Команды могут быть определены в ключевом кадре, внутри обработчика событий кнопки on() или внутри обработчика событий видеоклипа onClipEvent(), т.е. код сценария может располагаться в ключевом кадре временной шкалы, объекте Button или объекте Movie Clip.

    События и их обработчики

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

    Единственным событием, связанным с ключевым кадром временной шкалы, является переход к нему в ходе воспроизведения фильма. В этом случае, выполняются действия, размещённые в этом кадре (инициация и изменение значений переменных, вызов функций и т.п.).

    События, связанные с объектом Button (Кнопка)

  • Press (нажатие). Однократный щелчок мышью можно разделить на две стадии: опускание кнопки (нажатие - press) и подъём кнопки (отпускание - release). Событие Press наступает, когда курсор находится над активной областью кнопки и кнопка мыши фиксируется в опущенном положении;
  • Release (отпускание) - наступает, когда зафиксированы опускание и отпускание, т.е. полный щелчок мыши, и курсор находился при этом над активной областью кнопки;
  • Release outside (отпускание за пределами) наступает в ответ на следующую последовательность движений мыши: нажатие над активной областью кнопки и отпускание вне её ("прерванный" щелчок);
  • Roll Over (Перемещение над) - происходит, когда курсор попадает в активную область кнопки, без нажатия кнопки мыши;
  • Roll Out (перемещение за пределы) - происходит, когда курсор выходит из активной области кнопки, без нажатия кнопки мыши;
  • Drag Over (Перетаскивание над) - наступает, если кнопку мыши нажимают, когда курсор находится вне активной области, а затем перемещают курсор в активную область кнопки;
  • Drag Out (Перетащить за пределы) - наступает, если кнопку мыши нажимают, когда курсор находится над активной областью кнопки, а затем уводят курсор из активной области.
  • Key Press позволяет выполнить действие, когда пользователь нажал клавишу на клавиатуре. Следует учитывать, что клавиша <Esk> не работает в качестве управляющей клавиши; не поддерживаются комбинации нескольких клавиш (кроме использования клавиши <Shift< для изменения регистра); если Flash-фильм отображается в броузере, то перед распознаванием нажатий клавиш он должен получить фокус. Для этого пользователь должен щелкнуть мышью на доступном участке фильма внутри броузера. События Key Press чувствительны к регистру клавиатуры

    Формат обработчика событий для экземпляров кнопок:

    on (событие)
    {
             действия
    }

    События, связанные с объектом MovieClip (видеоклип)

  • Load (Чтение) - объект MovieClip загружен на временную шкалу;
  • Unload - объект MovieClip больше не находится на временной шкале;
  • mouseDown - нажата кнопка мыши;
  • mouseUp - отпущена кнопка мыши;
  • mouseMove - произошло движение курсора;
  • keyDown - нажата произвольная клавиша клавиатуры;
  • keyUp - отпущена клавиша клавиатуры.

    Формат обработчика событий для экземпляров видеоклипов:

    onClipEvent (событие)
    {
             действия
    }

    Добавление сценариев

    В среде Flash существует специальный элемент интерфейса, позволяющий добавлять интерактивные команды в фильмы Flash - это панель Actions (Действия). Открыть её можно несколькими способами:

    Меню параметров панели Окно сценариев Область параметров   
  • выбрать в меню команду Window > Actions (Окно > Действия);
  • нажать клавишу <F9> в версии Flash МХ или комбинацию <Ctrl+Alt+A> в версии Flash 5
  • воспользоваться командой Actions контекстного меню.
  • Добавлять действия во Flash можно в двух режимах: обычном (Normal) и экспертном (Expert). По умолчанию используется обычный режим. Выбор режима осуществляется в меню параметров панели.

    Суть обычного режима состоит в назначении действий ключевым кадрам и кнопкам путём выбора их из раскрывающихся меню и назначении для них параметров в области задания параметров с помощью имеющихся значений или ввода значений в опции поля вручную. В обычном режиме невозможно вручную набирать текст в окне сценария.

    В экспертном режиме можно набирать коды на клавиатуре прямо в правой части панели, а также вставлять туда коды из папок действий в левой части панели Actions.

    Действия в окно сценария ActionScript можно добавлять тремя способами.

  • Перетаскивать действия из списка действий в левой части панели Actions в окно сценария в правой части панели;
  • Выбрать действие из вложенных меню, открываемых щелчком на кнопке со значком плюс;
  • Выполнить двойной щелчок на действии в списке в левой части панели.

    Переменные и типы данных

    Одной из важных характеристик ActionScript является контекстно-зависимая природа переменных. При их объявлении не указывается тип; при исполнении сценария система автоматически распознаёт тип данных, хранящийся в той или иной переменной. Поэтому, выражения "n = = 3" и "n = = "3"" оказываются истинными одновременно, а если случайно присвоить массиву числовое значение, искать ошибку придётся долго.

    В то же время, преобразования не универсальны, и иногда ошибки могут возникать из-за того, что разработчик не учёл невозможность преобразования типов (например, взял в кавычки ссылку на объект).

    Имя переменной ActionScript содержит латинские буквы, цифры, знаки доллара и подчёркивания. Имя переменной не может начинаться с цифры, совпадать с ключевым словом и содержать пробелы. Регистр не учитывается.

    Каждая переменная имеет свою область видимости, или границы, в пределах которых она будет объявлена. В ActionScript существует три вида области видимости: временная шкала, локальная область, глобальная область.

    Переменные временной шкалы объявляются путём присвоения конкретных значений, например: n = 3. Область видимости такой переменной совпадает с той временной шкалой, где она объявлена. Для получения доступа к переменной этого типа из другой временной шкалы следует указать целевой путь (см Адресация).

    При объявлении переменной с помощью ключевого слова var образуется локальная переменная: var n = 3. Локальная переменная может реально объявляться только внутри функции. Использование локальных переменных позволяет избежать конфликтов имён, что очень актуально в условиях возможности объявлять переменные в любой точке программы.

    Глобальные переменные появляются в Flash MX. Для введения глобальной переменной используется идентификатор _global, например: _global.n = 3. Такая переменная доступна из любой области видимости без указания целевого пути.

    Типы данных:

  • Строки (string). Строка - последовательность символов (букв, цифр, знаков пре-пинания, пробелов). Строковые литералы заключаются в двойные кавычки: "123";
  • Числа (number);
  • Булев тип данных (Boolean): переменные и константы этого типа принимают одно из значений true или false;
  • Объект (Object) - к этому типу относятся объекты кода, созданные с помощью языка ActionScript;
  • Movie Clip - тип данных, который имеют экземпляры видеоклипов на рабочем поле.

    Если попытаться получить доступ к переменной, которая не объявлена или же которой не присвоено значение, переменная получает специальное значение undefined. Обычно это происходит в случае синтаксических ошибок. Поэтому, для инициализации переменной в случае отсутствия альтернативы используется специальное значение null. Если тип null преобразуется в строковое значение, он получает значение пустой строки; если в число - 0, если в булево значение - false.

    Действия и операторы

    Основные операторы ActionScript приведены в таблице 1 Таблица 1
    Категория Оператор Наименование Пример
    Математические операторы+Сложениеx + y
    -Вычитаниеx - y
    *Умножениеx * y
    /Делениеx / y
    %Деление по модулю (остаток)x % y
    ++Инкрементx++
    --Декрементx--
    -Унарный минус-x
    Операторы присваивания=Присваиваниеx = y
    +=Присваивание результата добавления значенияx += y
    -=Присваивание результата вычитания значенияx -= y
    *=Присваивание результата умножения на значениеx *= y
    /=Присваивание результата деления на значениеx /= y
    %=Присваивание результата деления с остаткомx %= y
    Операторы сравнения==Равноx == y
    !=Не равноx != y
    <Меньшеx < y
    >Большеx > y
    <=Меньше или равноx <= y
    >Больше или равноx >= y
    ===Строгое равенство (без автоматического преобразования типов)x === y
    !==Строгое неравенствоx !== y
    Логические операторы&& Иx && y
    ||ИЛИx || y
    !НЕ!x
    Операторы доступа[]Доступ к элементам массиваa[i]
    .Доступ к свойствам и методамMc1._x

    Действия (Actions) в ActionScript - это команды, задающие поведение того или иного элемента фильма. Ниже приведены действия ActionScript, наиболее часто применявшиеся при разработке курса.

  • Действие if обеспечивает выполнение некоторых инструкций в случае, если выполняется определённое условие.

    Формат:

    if (условие)
              {   действия1   }
    else
              {   действия2  }

    (Условие) - выражение логического типа. Блок else необязателен.
  • Действия while и do..while, или цикл с неизвестным числом итераций, обеспечивают выполнение блока действий, пока условие истинно.

    Формат:

    while (условие)
              {   действия  }

  • Действие for обеспечивает выполнение цикла с известным числом итераций.

    Формат:

    for (начальное значение; условие; изменение)
               {  действия  }

  • Действия play и stop. При выполнении действия play Flash начинает последовательно воспроизводить содержимое всех кадров, расположенных на текущей временной шкале. Действие stop останавливает воспроизведение фильма или видеоклипа.
  • Действие GoTo (перейти к) заменяет текущий кадр фильма на кадр, указанный в установочных параметрах действия goto. Существует две разновидности действия goto: gotoAndStop("сцена", кадр) заменяет текущий кадр на заданный и затем останавливает воспроизведение фильма, gotoAndPlay("сцена", кадр) заменяет текущий кадр на заданный и затем выполняет действие play (воспроизвести).

    Способы указания целевого кадра:

  • Действие trace используется при отладке программы, показывает значение переменной в окне отладчика.

    Формат: trace(переменная)

    Определение пользовательских функций

    Объявление пользовательской функции начинается служебным словом function, за которым следует имя функции. Имя функции может содержать буквы, цифры, знаки подчёркивания и доллара, не должно содержать пробелов, начинаться с цифры или совпадать с ключевыми словами ActionScript. За именем функции следует список параметров, заключённый в круглые скобки. Параметры перечисляются через запятую. Их может не быть, но круглые скобки обязательны. Тело функции заключается в фигурные скобки.

    Функция может возвращать не возвращать значений или возвращать одно значение. Этот процесс реализуется с помощью ключевого слова return, например: return m. После выполнения инструкции, содержащей команду return, выполнение функции завершается.

    В ActionScript допустимо использование рекурсивных функций.

    Рекомендуется использовать в функциях только локальные переменные.

    Пример

    function sign(a)                 //возвращает знак a
    {
         if (a==0) {return 0}
         else if (a<0) {return -1}
         else {return 1}
    }
           ...
    k=99
    b=sign(k)                //1
    c=sign(-200)            //-1

    function min(arr)                //возвращает наименьший элемент массива
    {
         var w=arr[0]
         for (var i=0; i< arr.length; i++)
         {
            if (arr[i]<w) { w = arr[i] }
         }
         return w
    }
           ...
    k=new Array(1,2,13,-6,-9,9,0)
    b=min(k)                         //-9

    Объекты Array

    Создание массива. Чтение и запись данных в массив

    Существует несколько способов создания массивов

  • Создание массива посредством задания литерала
        A = ["winter", "summer", "spring"]
  • Создание массива с помощью конструктора new
        A = new Array()       //новый объект Array без элементов
        A = new Array(6)       //новый объект Array с шестью пустыми элементами
        A = new Array("winter", 2.45, false)

    В языке ActionScript не требуется предопределять число элементов массива. Элементы одного массива могут иметь различный тип данных.

    Нумерация элементов массива начинается с нуля.

    Для доступа к элементу массива используется оператор квадратные скобки [].

    В ActionScript возможно создание многомерных массивов. Однако, оно заметно отличается от создания многомерных массивов в других языках программирования.

    Пример

    // создаём конструктор для объектов Dot
    function Dot (nm, cx, cy) {
         this.name=nm
         this.x=cx
         this.y=cy
    }
    // создаём массив
    dots = new Array()
    //заполняем массив объектами Dot
    dots[0] = new Dot("O",0,0)
    dots[1] = new Dot("A",312,315)
         ...
    line = dot[1].name + dot[0].name         //Результат: line="AO"

    Некоторые свойства и методы объектов Array

    Объект Array имеет доступное только для чтения свойство length (длина), принимающее целое значение, равное числу элементов массива. Доступ к свойству length осуществляется с помощью оператора точка: a.length

    Для преобразования массива в строку используется метод join(). Он возвращает строковое значение элементов массива, отделенных друг от друга определён-ным разделителем. Строковое значение, переданное методу в качестве параметра, используется для разделения элементов массива во вновь сформированной строке. По умолчанию (если параметры не передаются) в качестве разделителя использу-ется запятая. Обратным методом является метод split() объекта String.

    Сортировка массивов осуществляется методами sort() и sortOn().

    Метод sort() упорядочивает элементы одномерного массива по возрастанию их значений в коде ASCII. В качестве необязательного параметра метода выступает ссылка на функцию, задающую правила сортировки.

    Примеры

    1 Использование метода sort() без параметра:

    nums = new Array(35, 299, 1, 9)
    nums.sort()
    trace(nums)        //Результат: 1, 299, 39, 9

    2 Использование метода sort() с параметром:

    nums = new Array(35, 299, 1, 9)
    nums.sort(Sorter)
    trace(nums)
           ...
    function Sorter(a,b)
          { return a-b }

    Результат: 1,9,35,299

    Метод sortOn() используется для сортировки ассоциативных массивов.

    Объекты MovieClip

    Адресация

    Если с помощью кода ActionScript необходимо получить доступ к методам или свойствам экземпляра объекта Movie Clip, следует знать, как их найти, или каким образом выполнить адресацию. В ActionScript используется два вида адресации - абсолютная и относительная.

    При абсолютной адресации указывается полный путь к объекту. Наиболее употребительным обозначением основной временной шкалы является имя _root.

    При относительной адресации указывается путь к объекту относительно другого объекта. Для обозначения верхнего по отношению к вызываемому уровня в иерархии используется слово _parent.

    При обращении к экземпляру видеоклипа может быть использован оператор квадратные скобки [].

    Примеры

    1. _root.play() означает инструкцию "начать воспроизведение на основной временной шкале".
    2. Пусть на основной временной шкале расположен экземпляр символа видеоклипа под названием mc1, содержащий другой экземпляр под названием ruler. Тогда _root.mc1 - полный адрес экземпляра mc1, _root.mc1.ruler - полный адрес экземпляра ruler, _parent.play() при вызове из экземпляра ruler означает инструкцию "начать воспроизведение на временной шкале mc1", _parent._parent.play() - "начать воспроизведение на основной временной шкале".
    3. Пусть на основной временной шкале определены переменная a и функция MyFunction(n). Тогда для вызова функции из экземпляра какого-либо символа видеоклипа следует использовать полный адрес:
      _root.MyFunction(_root.a).
      Если по ошибке записать
      _root.MyFunction(a),
      программа создаст новую переменную a (со значением undefined) внутри экземпляра видеоклипа.
    4. Запись _root.mc1 примера 2 эквивалентна записям
      _root["mc1"] и _root["mc"+1];
      запись _root.mc1.ruler эквивалентна записям
      _root["mc1.ruler"] и _root["mc1"].ruler.

    Свойства объектов Movie Clip

    Свойства - это характеристики фильмов и видеоклипов (такие, как ширина и высота), значения которых можно узнать и задать. Каждый экземпляр видеоклипа имеет изменяемые свойства, от которых зависят его внешний вид, размеры и положение на рабочем поле. Некоторые свойства видеоклипа доступны только для чтения, т.е. изменить их значение невозможно.

    Перед названием каждого свойства ставится символ подчеркивания. Для доступа к свойству используется оператор точка.

    Формат:

    a._b
    где а - имя экземпляра объекта, b - свойство.

    Описание свойств объекта MovieClip приведено в таблице 2. Все они доступны для чтения. Символ "W" в графе "Запись" напротив названия свойства означает, что его значение можно изменять с помощью команд ActionScript (версии Flash 5 и выше).

    Таблица 2. - Свойства Flash-фильмов и видеоклипов
    Категория Свойство Запись Описание
    Позиция _x W Определяет горизонтальное расстояние между центральной точкой видеоклипа и левым верхним углом рабочего поля, на котором он находится. Значение измеряется в пикселях.
    _y W Определяет вертикальное расстояние между центральной точкой видеоклипа и левым верхним углом рабочего поля, на котором он находится. Значение измеряется в пикселях.
    _xmouse Определяет расстояние по горизонтали (в пикселях) между нулевой точкой видеоклипа (фильма) и текущим положением курсора мыши.
    _ymouse Определяет расстояние по вертикали (в пикселях) между нулевой точкой видеоклипа (фильма) и текущим положением курсора мыши.
    _rotation W Определяет величину поворота видеоклипа в градусах. Отсчёт начинается от вертикальной оси.
    Размеры_xscaleWОпределяет ширину экземпляра видеоклипа (фильма). Значение свойства измеряется в процентах от ширины исходного символа.
    _yscaleWОпределяет высоту экземпляра видеоклипа (фильма). Значение свойства измеряется в процентах от ширины исходного символа.
    _widthWОпределяет ширину (в пикселях) экземпляра видеоклипа (фильма).
    _heightWОпределяет высоту (в пикселях) экземпляра видеоклипа (фильма).
    Внешний вид _alphaW Определяет степень прозрачности видеоклипа или фильма. Значение измеряется в процентах. 100% означает, что видеоклип полностью непрозрачен.
    _visible W Значение относится к логическому типу данных и определяет, виден экземпляр (true) или скрыт (false)
    Внутренний путь_nameWВозвращает или переназначает имя экземпляра видеоклипа
    _target Возвращает корректную строку, которую можно использовать для ссылки на экземпляр видеоклипа.
    _droptarget Возвращает имя и абсолютный путь последнего видеоклипа, над которым был отпущен перетаскиваемый видеоклип
    Внешний путь_url Возвращает полный путь к фильму Flash (swf-файлу), в котором выполняется действие.
    Временная шкала_currentframe Возвращает номер текущего кадра фильма или экземпляра видеоклипа.
    _totalframes Возвращает общее количество кадров, находящихся на временной шкале фильма или экземпляра видеоклипа.
    _framesloadedВозвращает количество кадров, которые загружены из сети.

    Некоторые методы объектов Movie Clip

    В Flash версии MX и выше методы объектов MovieClip позволяют реализовать самые разные функции: от управления временной шкалой до рисования средствами ActionScript. Спектр методов, совместимых с Flash 5, значительно уже.

    Методами управления воспроизведением на временной шкале являются play(), stop(), gotoAndPlay(), gotoAndStop(), nextFrame() и prevFrame(). Описание первых четырёх приводятся в п. "Действия и операторы". Два последних метода используются для перемещения к последующему или предыдущему ключевому кадру временной шкалы соответственно и не требуют параметров.

    Объекты MovieClip содержат методы, позволяющие образовывать копии объектов MovieClip средствами ActionScript. С программным созданием этих объектов связано понятие глубины.

    Все графические объекты, созданные программным путём, размещаются в специальном слое объектов, созданных средствами ActionScript. Этот слой располагается над всеми остальными слоями Flash-фильма и содержит дополнительные подслои, обозначаемые глубиной. Таким образом, глубина объекта - целое значение, определяющее его размещение по оси аппликат относительно остальных элементов в данном слое (это означает, что объект с меньшей глубиной при наложении перекрывается объектом с большей глубиной). На определённой глубине может находиться только один объект. Если не принять во внимание эту особенность, объекты с одинаковой глубиной будут перезаписывать друг друга.

    Метод duplicateMovieClip() используется для создания копии экземпляра MovieClip. Новый объект приобретает многие свойства исходного с аналогичными значениями и располагается на той же временной шкале. Впоследствии свойства нового объекта можно изменить.

    Существует два способа записи копирования видеоклипов:

  • mcObject.duplicateMovieClip(newObjectName, depth);
  • duplicateMovieClip(mcObject, newObjectName, depth).

    Здесь mcObject - имя существующего экземпляра видеоклипа, newObjectName - имя нового экземпляра видеоклипа, depth - глубина.

    Если объект MovieClip, созданный с помощью метода duplicateMovieClip(), уже не нужен, целесообразно освободить от него память. Для удаления дублированных объектов используется метод removeMovieClip(). Здесь также существует два способа записи:

  • newObject.removeMovieClip();
  • removeMovieClip(newObject).

    Здесь newObject - удаляемый объект.

    Для определения глубины объекта MovieClip используется метод getDepth(), не требующий параметров и возвращающий числовое значение глубины объекта.

    В Flash версии MX и выше появляется возможность программно создавать текстовые поля с помощью метода createTextField(), но в Flash 5 она отсутствует.

    Программное рисование впервые вводится в Flash MX.


    Назад
    К содержанию