Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
материал. часть2 / Розенцвейг_Adobe_Flash_Создание аркад, головоломок и других игр с помощью ActionScript.rtf
Скачиваний:
52
Добавлен:
11.02.2016
Размер:
9.87 Mб
Скачать

Создай лису методом «Нажми и измени»

Исходный файл: Makeafox‑switch.fla

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

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

Задача проекта

Исходное изображение будет полным, но, когда пользователь щелкнет по одному из его элементов, он изменится. Например, пользователь может щелкнуть по глазам и вместо них появится другая пара глаз.

Подход

Библиотека данного ролика имеет не такую, как мы рассматривали раньше, организацию. Вместо отдельных изображений каждого варианта элемента лисы используются клипы. Каждый клип содержит все варианты данного элемента, по одному в кадре. Например, клип «Eyes» («Глаза») будет состоять из трех кадров, каждый из которых содержит другое изображение глаз.

Создание кода

Здесь не применяется перетаскивание, поэтому сценарий будет немного проще. Код представляет собой сценарий onClipEvent(mouseDown), помещенный в клип «ае1:юш», который расположен за пределами рабочего поля клипа. Как и функция hitTest в ролике Makeafox‑drag.fla, данный сценарий проверяет, какой клип выбран.

Однако вместо имен "Parti" – "Part13" клипы получают значащие имена (например, "Eyes" и "Head"). Сценарий должен проверить каждый клип, для чего все клипы собраны в общий список.

При нахождении соответствующего клипа код продвигается на один кадр вперед. Если впереди кадров больше нет, он возвращается к кадру 1.

onClipEvent (mouseDown) {

// Определяем, в каком месте щелкнул пользователь.

x = _root._xmouse;

o = _root._ymouse;

// Выясняем, по какому элементу произведен щелчок.

list = ["Eyes", "Mouth", "Head", "Legs", "Left Arm",

"Right Arm", "Body"];

for(i=0;i<list.length;i++) {

if (_root[list[i]].hitTest(x, y, true)) {

// Меняем выбранный элемент.

with (_root [ list [i]]) {

// Переходим к следующему кадру.

if (_currentFrame == _totalframes) {

gotoAndStop(t); }

else {

nextFrame();

}

}

break;

}

}

}

Примечание

Номер кадра и общее количество кадров определяется при помощи параметров _currentFrame и _totalFrame. Это очень удобно в случае, когда клипы могут включать любое количество кадров, а код – учитывать все возможные варианты.

Примечание

Конструкция with указывает, что все команды и функции кода в рамках этой конструкции должны выполняться для определенного клипа. Это позволит вам обойтись без добавления _root[movieClip] в начале каждой команды или функции.

Ролик Makeafox‑switch.fla можно увидеть на Web‑сайте. На рис. 7.4 показан один из возможных вариантов, получившихся в результате внесенных изменений. Независимо от того, сколько раз и в какой последовательности пользователь щелкает по элементам изображения, оно всегда будет оставаться цельным.

Рисунок 7.4. Пользователь может щелкнуть по любой части тела и изменить ее

К сведению

Для того чтобы закончить создание ролика Makeafox‑switch.fla, следует обратить внимание еще на несколько деталей. Во‑первых, каждый первый кадр клипа должен содержать команду stop(). Это поможет избежать безостановочного воспроизведения всех вариантов клипа при первом запуске ролика. Затем каждый клип должен быть помещен на рабочее поле и назван, как соответствующий элемент списка в коде.

Другие возможности

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

Альбом для рисования

Исходный файл: Drawing‑line.fla, Drawing‑fill.fla

Хотя предыдущие два примера используют ваши творческие способности, в действительности они не дают возможности создавать что‑либо новое. Теперь давайте рассмотрим программу для рисования, работа в которой начинается с чистого листа и которая позволяет пользователю изображать все, что угодно, и распечатывать результат.

Задача проекта

Задача данного раздела – создать программу, в которой пользователь может рисовать, как в простом графическом приложении. Пользователь должен иметь возможность рисовать простые линии и фигуры, а также применять различные цвета.

Создание простой программы рисования

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

Мы воспользуемся новыми командами для рисования, появившимися в версии 8. Описание этих команд вы можете найти на панели ActionScript (Objects → Movie → Movie Clip → Drawing Methods) или в окне Reference (справка).

Эти команды как бы имитируют движения пользователя, передвигающего мышь. Сначала используем команду lineStyle для определения толщины и цвета будущей линии. Команда moveTo передвигает указатель точки для рисования по экрану; линия при этом не прорисовывается. И наконец, мы используем команду lineTo для рисования линии из текущей позиции в заданную.

Единственным элементом нашего ролика является клип "actions", который содержит весь необходимый код.

Сценарий начинается с присваивания переменной draw значения false. Эта переменная используется, чтобы определить, рисует пользователь или нет. Затем с помощью lineStyle мы задаем толщину и цвет.

Примечание

Третий параметр команды lineStyle определяет прозрачность линии, то есть свойство alpha. Значение 100 соответствует абсолютно непрозрачному объекту, значение 50 делает объект полупрозрачным.

onClipEvent (load) {

// Рисовать или не рисовать?

draw = false;

// Линия шириной в 1 пиксел, черная, непрозрачная.

_root.lineStyle(1,0x000000,100);

}

Когда пользователь нажимает кнопку мыши, переменной draw присваивается значение true. Затем команда moveTo перемещает указатель в текущую позицию курсора. Мы используем конструкцию _root для обращения к свойствам _xmouse и _ymouse, т. к. хотим чтобы центр координат был независим от положения клипа «actions».

onClipEvent (mouseDown) {

// Будем рисовать.

draw = true;

// Переходим к координатам курсора.

_root.moveTo(_root._xmouse, _root._ymouse);

}

Когда пользователь отпускает кнопку мыши, переменной draw присваивается значение false, и процесс рисования завершается.

onClipEvent (mouseUp) {

// Завершаем рисование.

draw = false;

}

Значение переменной draw проверяется при каждом обращении к кадру. Если оно истинно, то рисуется линия от предыдущей к текущей позиции курсора.

Примечание

Константы true и false могут использоваться конструкциями if и for в качестве проверки условия выполнения кода. Вы также можете использовать их для отслеживания объектов, которые могут находиться только в двух состояниях (вкл/выкл).

onClipEvent (enterFrame) {

if (draw) {

_root.lineTo(_root._xmouse,_root._ymouse);

}

}

Примечание

Обратите внимание, что все обращения к командам рисования происходят через конструкцию _root. Это делается для того, чтобы линии рисовались в самом ролике, на рабочем поле, а не на рабочей области клипа "actions". Можно создать отдельный клип "canvas" (холст) и рисовать линии в нем. Прорисовываясь, линии автоматически оказываются на самом заднем плане, так что, если в клипе (или ролике) есть еще какие‑то объекты, они будут закрывать линию. Наверное, вам будет удобней рисовать на пустом уровне.

На рис. 7.5 показана кривая, которая получилась в результате нажатия пользователем кнопки мыши и перемещения курсора. Помните, что скорость рисования соответствует частоте смены кадров ролика, поэтому для того, чтобы процесс рисования проходил плавно, это значение должно быть максимальным и равняться 120 кадр/с. Готовый ролик вы можете увидеть, загрузив с Web‑сайта файл Drawing‑line.fla.

Рисунок 7.5. Простая программа рисования позволяет нарисовать длинную черную кривую

Соседние файлы в папке материал. часть2