Я не буду останавливаться на цветовом решении при оформлении проекта, я рассмотрю три приема, которые придадут вашему проекту более профессиональный вид.

Добавление громкости
Для изменения громкости во Flash существует специальный метод .setVolume() он применяется к звуковому объекту. Для изменения громкости мы создадим "ползунковый регулятор" или полосу прокрутки.

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

Регулятор громкости должен быть одновременно и кнопкой, он должен реагировать на мышь, и клипом, так как только клипы могут изменять свое положение программно. Поэтому превратите регулятор громкости в символ типа "клип" и на панели свойств дайте ему имя drag. А после внутри символа drag конвертируйте рисунок в кнопку. У вас должна получиться вот такая "матрешка" кнопка находится внутри ролика "drag", который в свою очередь находится внутри ролика-регулятора. К кнопке добавьте следующий программный код:

1
2
3
4
5
6
on (press) {
startDrag("", false, -60, 0, 60, 0);
}
on (release, dragOut) {
stopDrag();
}

Рисунок 20 показывает «матрёшечный» принцип расположения символов, а также где искать эти новые для нас команды.

Создание регулятора, задание границ его перемещения
Рис. 20. Создание регулятора, задание границ его перемещения.

Смысл данного кода состоит в следующем: при нажатии начинается перетаскивание, причем перемещение возможно только по оси X в интервале от -60 до +60. При отпускании мыши или если мышь ушла в сторону перетаскивание останавливается.

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

Для данного символа задайте приведенный ниже код. Обратите внимание, впервые мы встречаемся с программным кодом, который соответствует не кадру и не кнопке, а клипу!

1
2
3
4
5
6
7
8
9
10
11
12
onClipEvent (load) {
_parent.volSlider.drag._x = 0;
}
onClipEvent (enterFrame) {
vol = _parent.volSlider.drag._x+60;
_parent.c_1.setVolume(vol);
_parent.cd1.setVolume(vol);
_parent.d_1.setVolume(vol);
_parent.dd1.setVolume(vol);
...
_parent.volAt = Math.round(vol);
}

Код состоит из двух событий: загрузка (load) и загрузка первого кадра клипа (enterFrame). При загрузке ролика координата _x объекта drag, который находится внутри объекта volSlider, который в свою очередь принадлежит "родительскому" клипу приравнивается к нулю. Именно это говорит компьютеру строка 2, точечная нотация здесь как у любого объектно-ориентированного языка программирования.

В дальнейшем при изменении клипа переменная vol принимает значение _parent.volSlider.drag._x+60, то есть значение текущей координаты плюс шестьдесят. Это означает, что в крайнем левом положение, при координате x, равной -60, переменная vol будет равна нулю. Дальше для всех звуковых объектов, которые располагаются в "родительском" клипе, т.е. в основном ролике применяется метод .setVolume(vol) изменяющий громкость звукового объекта.

Добавление справки
Проект получился достаточно сложным и в него обязательно нужно включить возможность получения справки, причем эта возможность должна быть доступна из любого места. Существует несколько приемов, как это можно реализовать. Мне наиболее близок способ, при котором справка находится в отдельном файле и он загружается при нажатии соответствующей кнопки. Этой кнопкой будет вопросительный знак в вернем левом углу основного файла. Ей соответствует следующий код:

1
2
3
on (release) {
loadMovieNum("help.swf", 200);
}

Кнопка загружает файл help.swf на двухсотый слой. Номер слоя выбран из расчета, что он точно перекроет и основной слой с роялем, кнопками и всеми нотами.

Создайте новый файл help.fla, его размеры должны совпадать с размерами основного проекта, у меня 700 на 600 пикселей. На нем разместите текстовую, графическую информацию поясняющую работу с вашей игрой (рисунок 21). Обязательно слоем ниже добавьте прямоугольник белого цвета, своими размерами совпадающими с размерами холста, иначе сквозь текст будет просвечивать рояль, нотный стан и т.д.

Справка о проекте
Рис. 21. Справка о проекте.

Для кнопки выхода из режима справки добавьте следующий код:.

1
2
3
4
5
on (release) {
tellTarget ("_level0") {
loadMovieNum("", 200);
}
}

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

Очистка нотного стана.
Нотный стан в проекте очищают две кнопки. Одна очищает ноты музыкального образца:

1
2
3
4
5
6
on (release) {
for (j=1; j<=50; j++) {
duplicateMovieClip("n0", "n0"+j, j);
}
song = "";
}

а вторая ноты игрока и тем самым начинает игру заново:

1
2
3
4
5
6
7
8
on (release) {
for (j=100; j<=150; j++) {
duplicateMovieClip("n0", "n0"+j, j);
}
sl=100;
xp = "";
result="";
}

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