Диалоговое окно Symbol Linkage
Рисунок 3.5 Диалоговое окно Symbol Linkage Properties позволяет включать клип в swf-файл, даже если он не используется на рабочем поле
В окне следует установить флажок Export for ActionScript (Экспортировать для ActionScript). Затем вы должны придумать имя эталона, на которое будет ссылаться код. Я обычно использую имя эталона из библиотеки.
Исходный файл: AttachMovie.fla
Первым параметром функции attachMovie является имя из диалогового окна Symbol Linkage Properties. Второй параметр - это имя копии клипа на рабочем поле, третий - уровень клипа. Код данной кнопки, содержащийся в файле AttachMovie.fla, за исключением одной строки, полностью совпадает с кодом примера DuplicateMovieClip.fla.on (press) {
// Дублируем первый клип.
attachMovie("myMovieClip","newclip"+level,level);
// Кладем в случайное место.
_root["newclip" + level]._x = int(Math.random!)*550);
_root["newclip"+level]._y = int(Math.random()*400);
// Увеличиваем счетчик, level++;
}
Исходный файл: RemoveMovieClip.fla
При помоши функции RemoveMovieClip вы можете удалять клипы с рабочего поля. Например, следующий код из файла RemoveMovieClip.fla перед созданием нового клипа удаляет предыдущий:on (press) {
// Удаляем предыдущий клип.
_root["newclip"+(level-1)].removeMovieClip();
// Дублируем первый клип.
attachMovie("myMovieClip","newelip"+level,level);
// Кладем в случайное место.
_root["newelip"+level],_x=int(Math.random()*550);
_root["newclip"+level]._y=int(Math.randomf)*400);
// Увеличиваем счетчик.
level++;
} Используя данные приемы, вы можете сделать так, чтобы ваши игры и приложения создавали свои собственные клипы, добавляя и удаляя их с рабочего поля по мере необходимости.
Эти 10 клипов были созданы из эталона при помощи ActionScrip
Рисунок 3.6 Эти 10 клипов были созданы из эталона при помощи ActionScrip
Вторая часть кода находится в программе обработки onClipEvent (enterFrame). Код выполняется в каждом цикле клипа "actions". Если клип воспроизводится со скоростью 12 кадров в секунду, код будет выполняться также 12 раз в секунду.
onClipEvent (enterFrame) {
// Поворачиваем каждый клип в цикле,
for(i=0;i
_root["sample"+i]._rotation += 5;
}
}
Исходный файл: Gears.fla
Я также создал улучшенную версию ролика под названием Gears.fla. За исключением кода ролик ничем не отличается от предыдущего. В Gears.fla клипы расположены таким образом, что зубья шестеренок соприкасаются. Чтобы создать эффект работающего механизма, каждый ролик изначально повернут относительно предыдущего на 15 градусов. Соседние зубья каждой шестеренки расположены с интервалом в 30 градусов, поэтому зубъя соседних шестеренок сцепляются. Кроме того, каждая шестеренка вращается в направлении, отличном от направления врашения предыдущей. Вот как выглядит код:
onClipEvent (load) {
initialRotation = 0;
// Создаем 10 клипов,
for(i=0;i
/7 Присоединяем очередной клип.
_root'.attachMovie ("sample","sample"+i , i) ;
// Устанавливаем координаты
_root["sample" + i]._x = i * 37 ;
_root["sample"+i]._y = 100;
// Устанавливаем каждому следующему поворот
// на 15 градусов относительно предыдущего.
_root["sample"+l]._rotation = initialRotation;
initialRotation += 15;
onClipEvent (enterFrame) {
// Пробегаем все клипы через один.
for(i=0;i
// Поворачиваем по часовой стрелке.
_root [ "sample"+i] ._rotation += 5;
// Следующий поворот против часовой стрелки.
_root["sample"*(i+1)],_rotation -= 5;
}
}
Клип "secondMC" включен в клип
Рисунок 3.4 Клип "secondMC" включен в клип "firstMC", находящийся на рабочем поле
Файл Levels.fla содержит два клипа. Однако только файл "firstMC" находится на рабочем поле. Клип "secondMC" находится внутри "firstMC". Текстовое окно на рабочем поле и в каждом клипе связано с переменной testvariable Эти текстовые окна отображают значения переменной testvariable на рабочем поле и в клипах "firstMC" и "secondMC" соответственно.
То есть в каждом из клипов и на главной временной шкале (можно сказать в клипе _root) мы определили свою переменную и каждой из них присвоили имя testvariable.
Рабочее поле, а также каждый клип содержат кнопку, увеличивающую значение testvariable. Каждой кнопке назначен следующий код:on (press) { testVariable++; }
Кнопка изменяет значение переменной testvariable. на уровне того клипа, в котором находится данная кнопка. Кнопка, расположенная на рабочем поле, изменяет переменную testvariable на главном уровне Кнопка в клипе "firstMC" изменяет переменную testvariable в "firstМС", кнопка в "secondMC" - переменную testvariable в "secondMC" .Следует отметить, что три переменные с именем testvariable. являются тремя разными переменными. Находясь на разных уровнях, они как не связаны друг с другом.
Нажатие одной из кнопок меньшего размера изменяет значение переменной testvariable только на том уровне, где она расположена.
Вы можете изменять значение переменных не только на уровне, где не ходится код, но и на других уровнях при помоши синтаксиса ActionScript. Примером могут служить три кнопки большего размера, расположенные в нижней части экрана.
Все три кнопки находятся на рабочем поле, а не внутри клипов. Первая кнопка изменяет значение testvariable, не указывая определенна клип. В результате изменяется переменная testvariable рабочего поля.
Вторая кнопка указывает переменную testvariable внутри клипа "firstMC". Код выглядит следующим образом:
on (press) {
firstMC.testVariable++ ;
}
on (press) {
firstMC.secondMC.testVariable++;
}
_root["firstMC"].testVariable++;
Это удобно, если имя копии клипа содержит пробел, в таком случае данный метод является единственно возможным. Свойство _root используется также при создании более сложного кода, где надо представить имя клипа как строку для неявного указания этого имени. Применение данного метода будет рассмотрено в следующем разделе.Кнопки позволяют контролировать воспроизведение клипа
Рисунок 3.2 Кнопки позволяют контролировать воспроизведение клипа
Пять кнопок позволяют полностью контролировать клип. Кнопка Play (Воспроизведение) запускает воспроизведение ролика. При достижении конца клипа воспроизведение начинается снова с первого кадра. Кнопка Stop (Стоп) останавливает воспроизведение ролика в текущем кадре. Кнопка Rewind (Перемотать) возвращает клип к первому кадру. Кнопки Previous (Предыдущий) и Next (Следующий) продвигают клип на один шаг соответственно назад или вперед.
Прежде чем передать контроль над клипом пользователю, необходимо остановить клип. Обычно клипы запускаются сразу же после своего появления на рабочем поле. Чтобы предотвратить это, в первый кадр главной временной шкалы был помещен следующий сценарий, останавливающий анимацию клипа, а также сам ролик:
myMovieClip.stop();
stop () ;
В сценариях для кнопок команды клипу посылаются также при помоши точки. Вот сценарий кнопки Play, задающий воспроизведение клипа:
on (press) {
myMovieClip.play() ;}
on (press) {
nyMovieClip.stop() ;}
on (press) {
myMovieClip.gotoAndStop(); }
on (press) {
myMovieClip.prevFrame () ;}
on (press) {myMovieClip.nextFrame ();}
Обработчики событий
Обработчики событий
Во Flash 5 единственным способом отслеживания таких событий, как, например, enterFrame, было использование обработчиков onClipEvent в сценариях клипа. В версии MX появилась возможность использовать обработчики прямо в сценарии кадра.
Вот простой пример. Этот сценарий помещен в кадр и посылает сообщение в окно Output при каждом обращении к кадру.
root.onEnterFrame = function() {
trace("enterFrame Event");
}
root.onEnterFrame = myFunction;
function myFunction() {
trace("enterFrame Event");
}
При помоши кнопок расположенных
Рисунок 3.3 При помоши кнопок, расположенных вокруг клипа "fox", можно изменить его положение, масштаб и повернуть его
on (press) {
} Для изменения масштаба клипа используются переменные _xscale и _yscale. В случае, если переменные имеют одинаковые значения, масштаб клипа будет изменяться пропорционально. Значение 100 соответствует масштабу 100%.
Значения переменных _хsсаlе и _yscale можно задавать отдельно друг от друга. Они могут быть разными, при этом клип станет более тонким или более плоским.
Ниже приведен сценарий кнопки "50%". Две другие кнопки масштабирования используют аналогичный код, но с другими значениями.
on (press) {
fox.__xscale = 50;
fox._yscale = 50;
}
Далее приводится сценарий кнопки Tilt (Наклон). Она поворачивает клип на 30 градусов по часовой стрелке. Кнопка Straight (Прямо) возвращает клип в положение 0 градусов.
on (press) {
fox._rotation = 30;
}
Ролик Changingimages fla позволяет
Рисунок 3.7 Ролик Changingimages.fla позволяет отображать различные вилы одного и того же объекта
Каждая кнопка ролика Changingimages.fla задает перемещение клипа в определенный кадр. Приведем пример кода кнопки Up:
on (press) {
ship.gotoAndStop("up") ;
}
on (press) {
ship.gotoAndPlay("explode") ;
}
Просматривая ролик Changingimages.fla , обратите особое внимание на временную шкалу клипа "ship". Здесь кадры маркированы таким образом, что код использует не номера, а имена кадров.
Создание клипа сценария
Создание клипа сценария
Единственным способом управлять несколькими клипами будет поместить код в точку, контролирующую их все. Например, если у вас есть 10 клипов, вы можете поместить код в первый клип, который будет контролировать все остальные.
Почему бы вместо того, чтобы возлагать контроль на один из клипов, нам не создать клип, специально для этого предназначенный? Данный распространенный прием позволяет легко запомнить, куда вы поместили ваш код. Я назвал такой клип "actions movie clip" (клип сценария).
такой клип удобно называть контроллером.
Начните с создания при помоши инструмента Text небольшого текстового окна на рабочем поле и напишите в нем слово "actions" для того, чтобы его можно было легче идентифицировать.
Перед окончательной пубикацией ролика лучше удалить надпись "actions" из клипа сценария, так как итоговый swf-файл должен занимать как можно меньше места
Затем, выделив текстовое окно, выберите команду Insert -> Convert to Symbol для преобразования его в клип под названием "actions". Переместите его на серую область за пределами рабочего поля, так чтобы пользователь не видел слово "actions".Данный клип используется для назначения сценария, который будет управлять роликом. Предположим, вам необходим ролик, создающий 10 копий эталона из библиотеки и немного поворачивающий их с каждым новым циклом.
Исходный файл: actionsMC.fla
Прежде всего создайте эталон. В диалоговом окне Symbol Linkage Properties установите флажок Export This Symbol и укажите имя "sample" (см. файл actionsMCfla).Код, написанный ниже, будет включен в клип "actions". Он будет находиться внутри программы обработки onClipEvent и состоять из двух частей. Первый обработчик будет отзываться на событие load. Событие load происходит при первом появлении клипа. Код выполняется один раз. В данном случае следует воспользоваться возможностью и создать 10 новых клипов:
OnClipEvent (load) {
// Создаем 10 клипов,
for(i=0;i
_root.attachMovie("sample","sample"+i,i);
// Устанавливаем координаты
_root["sample"+i]._x = i*50 + 50;
_root["sample"+i]._y = 100; } }
Контроль воспроизведений клипа
Урок 15. Контроль воспроизведений клипа
Исходный файл: Mcplayback.fla
Клипы представляют собой как бы небольшие ролики внутри основного Flash-ролика. Они включают полноценную временную шкалу со слоями, а также большинство элементов основного ролика. И основной Flash-ролик, и клипы можно контролировать при помощи команд play() и stop().В библиотеке файла под названием Mcplayback.fla, находится клип "myMovieClip". Этот клип состоит из 10 кадров, промаркированных для того, чтобы вы знали, какой кадр клипа воспроизводится в данный момент.
Перетащив клип из библиотеки на рабочее поле, вы создадите его копию, которой можно и даже нужно присвоить имя. Для этого используйте панель Properties (Свойства), изображенную на Рисунок 3.1.
Управление свойствами клипа
Урок 16. Управление свойствами клипа
Исходный файл: Mcproperties.fla
Вы можете не только контролировать содержание клипа, но и задавать его внешние свойства. Например, управлять его положением, вращением и масштабом.В примере Mcproperties.fla в центре экрана находится клип с изображением лисы. И рисунок в библиотеке, и копия клипа имеют имя "fox".
Кроме этого, вокруг изображения лисы расположено восемь кнопок. Каждая из них задает свойство клипа. Внешний вид экрана показан на Рисунок 3.3. Первые три кнопки имеют названия Left (Левая), Middle (Средняя) и Right(Правая).
В уроке 6 "Анимация при помоши ActionScript" мы узнали, что переменная _х используется для описания горизонтального положения клипа на рабочем поле. Эта переменная и будет использоваться кнопками Left, Middle и Right. Они могут использовать и переменную _у для описания вертикального положения клипа, однако в данном примере это не требуется. Приведем код кнопки Left. Он задает горизонтальное положение рисунка равным 200, то есть размещает его немного слева от центра при условии, что ширина ролика составляет 550 пикселов. Кнопки Middle и Right отличаются только значением переменной _х.
Применение метода "Перетащи и положи" к клипам
Урок 17. Применение метода "Перетащи и положи" к клипам
Исходный файл: Dragsimple.fla
Важным свойством интерфейса, будь то игра или приложение, являете возможность перетаскивать элементы по экрану. Во Flash это можно сде лать несколькими способами. Мы рассмотрим три из них.Команда startDrag задает автоматическое следование клипа за курсором. Пример Dragsimple.fla демонстрирует самый простой способ применения данной команды.
Клип под названием "circle" с изображением круга был помешен на рабочее поле. Как только ролик запускается, нижеприведенная команда задает его движение следом за курсором. Она также задает остановку анимации главной временной шкалы, чтобы ролик не продолжал воспроизведение следующих кадров.
startDrag("circle", true);
stop () ;
Они могут использоваться в случае, если атрибут либо действует, либо нет, а также отображать результат сравнения, например "а = = b.
В примере Dragsimple.fla клип "circle" следует за курсором. Однако чаше всего применяется другой способ перетаскивания: пользователь подводит курсор к объекту, нажимает кнопку мыши, перетаскивает объект в нужное место и отпускает кнопку.Исходный файл: Dragcomplex.fla
Подобную манипуляцию можно осуществить с клипом, внутри которого содержится кнопка. В файле Dragcomplex.fla в тот же самый клип "circle" была помешена невидимая кнопка (в ней заполнен лишь один кадр "Hit"). Таким образом, клип circle включает такую же графику, как и в примере Dragsimple.fla, и, помимо этого, кнопку. Кнопке назначен следующий сценарий: когда пользователь нажимает кнопку, выполняется команда startDrag, когда отпускает - команда stopDrag.on (press) {
startDrag("",false) ;
on (release) {
stopDrag();
}
Команда stopDrag не требует никаких параметров. Одновременно может перетаскиваться только один клип, поэтому команде необходимо лишь остановить текущее действие перемещения, благодаря чему клип вернется в неподвижное состояние.
Одним из недостатков команды startDrag является то, что одновременно может быть перемешен только один клип. Кроме того, клип перемешается автоматически, поэтому за его движением трудно проследить. По этой причине вам не помешает знать еше один способ перетаскивания клипа.
Исходный файл: Dragbetter.fla
Соответствующий код содержится в файле Dragbetter.fla. Ролик устроен аналогично ролику из примера Dragcomplex.fla, клип которого содержит невидимую кнопку. Однако данной кнопке назначен совершенно другой сценарий. Согласно данному сценарию, переменная drag получает значение true, когда пользователь нажимает на кнопку, и значение false, когда отпускает.on (press) {
drag = true;
on (release) {
drag = false;
}
Сценарий устанавливает соответствие между переменными _х, _у перетаскиваемого клипа и _xmouse, _ymouse ролика. Два последних параметра описывают положение курсора мыши относительно рабочего поля основного ролика.
onClipEvent (enterFrame) {
if (drag) {
this._x = _root._xmouse;
this._y = _root._ymouse;
}
}
Клипы и уровни
Урок 18. Клипы и уровни
Начинающему программисту на ActionScript будет трудно понять, каким образом устроены клипы и уровни. Клип можно представить как ролик внутри основного Flash-ролика. Этот клип имеет свои переменные и атрибуты, отличные от параметров и атрибутов основного ролика.
Каждый раз, когда вы помешаете клип на рабочее поле, вы создаете новый объект. Основной Flash-ролик является объектом, а клип - объектом внутри этого объекта.
Flash-ролик можно сравнить с коробкой, полной игрушек. Если вы раскрасите коробку в синий цвет, игрушки не станут синими. Каждая из них сохранит свой первоначальный цвет. С другой стороны, если вы перенесете коробку на другое место, остальные игрушки последуют за ней, сохранив при этом свои свойства, такие как цвет и положение внутри коробки.
Предположим, коробка с игрушками закрыта, и вы просите кого-то в комнате достать машинку. Если человек не знает, что игрушка находится внутри коробки, ему будет нелегко это сделать. Недостаточно просто сказать: "Достань машинку". Необходимо сказать: "Достань машинку, которая находится в коробке".
Подобным образом устроены и клипы. Если ваш клип расположен на главной временной шкале Flash-ролика, вы можете обратиться к нему по имени "toyTruck" ("игрушечный грузовик"). Однако, если ваш клип "toyTruck" расположен внутри другого клипа под названием "toyBox", к нему необходимо будет обратиться следующим образом: "игрушечный грузовик внутри коробки с игрушками", или "toyBox.toyTruck'.
Исходный файл: Levels.fla
На Рисунок 3.4 изображен похожий случай. Данный ролик в файле Levels.fla.Копирование клипов
Урок 19. Копирование клипов
Важным аспектом создания игры является умение манипулировать клипами. Но сначала нужно научиться создавать клипы. Хотя во Flash это сделать несложно, вы, возможно, захотите, чтобы ваш код создавал клипы во время воспроизведения ролика.
Представьте себе игру, в которой космические корабли врага атакуют игрока. Приближается один корабль, за ним следующий и т. д. Вместо того чтобы заранее создавать сотни клипов, ваш код может создавать их по мере необходимости.
Существует два способа создания клипов: копирование существующего клипа и создание клипа из эталона, находящегося в библиотеке, но не используемого изначально на рабочем поле.
В первом случае используется функция duplicateMovieClip, при помоши которой создается дубликат существующего клипа. Приведем пример:
firstclip.duplicateMovieClip("newclip",0);
Функция duplicateMovieClip запускается копируемым клипом. Поэтому при ее использовании упоминается имя этого клипа, в данном случае "firstclip". Функция также содержит два параметра: имя новой копии клипа и уровень нового клипа.Это может немного вас запутать. Термин "уровень" здесь (применительно к команде duplicateMovieClip) означает порядок расположения клипов. В предыдущем же разделе данный термин использовался для описания включения одного клипа в другой.
В случае, если клип создан на уровне 0, как в предыдущем примере, он располагается под клипом уровня 1. Клип уровня 1 находится под клипом уровня 2 и т. д.
Не беспокойтесь, что два клипа окажутся на одном уровне, Flash не позволит это сделать. Достаточно в каждой команде duplicateMovieClip указывать другой номер уровня.
Исходный файл: DuplicateMovieClip.fla
В примере DuplicateMovieClip.fla демонстрируется применение данной команды. В первом и единственном кадре главной временной шкалы пе ременная level имеет значение 0. На рабочем поле находится кнопа "new MC", а также клип "firstclip". Каждый раз при нажатии кнопки выполняется следующий код:
on (press) {
// Дублируем первый клип.
firstclip.duplicateMovieClip("newelip"+level,level);
// Помещаем его в случайную позицию.
_root["newclip"+level]._x = int(Math.random()*550);
_root["newclip"+level]._y = int(Math.random()*400);
// Увеличиваем счетчик.
level++;
}
Обратите внимание, что в коде ActionScript я в первый раз использовал комментарий. Строки комментария начинаются с двух косых черт. Содержание строки, следующей за косыми чертами, полностью игнорируется Flash и предназначено для того, чтобы вы понимали, какое действие выполняет код. Чем длиннее блоки вашего кода, тем больше они нуждаются во вспомогательных комментариях. Комментарии используются для последующего редактирования кода, а также для того, чтобы вашему коллеге было легче его понять.
В данной программе обработки переменная level используется по-разному. Во-первых, для присвоения имени новому клипу (сначала клипу присваивается имя newclip. Переменная также отображает уровень клипа В конце программы значение переменной level увеличивается на 1. Таким образом, следующий создаваемый клип будет называться level1 и располагаться на уровне 1. С помощью функции Math.random () мы задаем будущему клипу случайные координаты в пределах рабочего поля. Обратите внимание, ссылка на клип осуществляется при помощи синтаксической структуры _root []. Другой способ создания новых клипов - использование функции attachMovie. Для выполнения данной функции не требуется, чтобы клип находился на рабочем поле. Он должен просто быть в библиотеке. Однако, если клип находится в библиотеке и не используется на рабочем поле, Flash автоматически не включит его в конечный swf-файл. Для того чтобы клип был включен в конечный файл, его необходимо выбрать в библиотеке и настроить его параметры в диалоговом окне Symbol Linkage Properties, которое вызывается из меню Options. Диалоговое окно изображено на Рисунок 3.5.Управление несколькими клипами
Урок 20. Управление несколькими клипами
Теперь, когда вы научились создавать клипы при помоши ActionScript, рассмотрим способы управления ими. Вы знаете, что можете управлять одним клипом с приписанным ему кодом, а если необходимо, управлять несколькими клипами? Что, если эти клипы ведут себя аналогичным образом?
Поместив клипы на рабочее поле, вы можете копировать код одного клипа и вставлять его в другие. Этот метод имеет несколько недостатков. Во-первых, необходимость копировать и вставлять. Затем, если вы захотите изменить код, вам придется сделать это во всех копиях клипа.
Пересечение объектов
Урок 21. Пересечение объектов.
В игах часто происходят столкновения между различными объектами, причем иногда с весьма разрушительными последствиями. Давайте научимся создавать код, позволяющий отслеживать такие события, как пересечение двух объектов или, например, прохождение курсора над определенным объектом.
Основной способ обнаружения ситуации, в которой два объекта пересекаются или объект закрывает определенную точку экрана, - использовать функцию hitTest. Аргументом функции hitTest могут быть координаты какой-либо точки или ссылка на обьект, например клип, кнопку или текстовое поле.
Давайте начнем с проверки пересечения клипа с точкой. Предположим, вы хотите определить, находится ли курсор над определенным клипом на рабочем поле. Клипу следует назначить следующий код:
onClipEvent (enterFrame) {
if (this.hitTest(_root._xmouse,_root._ymouse,true)) {
this._x = int(Math.random()*550);
this._y = int(Math.random()*400);
}
}
Исходный файл: Runaway.fla
Вышеописанный код рассматривается в примере Runaway.fla. Если установить курсор над клипом, он переместится в случайную точку экрана.Исходный файл: Collision.fla
Для того чтобы определить, пересекаются ли два клипа, вы можете использовать один параметр - указатель на второй клип. В ролике Collision.fla на рабочем поле находятся два клипа. Клип большего размера называется "target", меньшего - "bullet". За пределами рабочего поля расположен клип "actions" со следующим кодом:
onClipEvent (enterFrame) {
// Выясняем, попала ли пуля в мишень.
if (_root["target"].hitTest(_root["bullet"])) {
// Попадание, увеличиваем цель.
_root["target"]._xscale += 5;
_root["target"]._yscale += 5;
// Убираем пулю.
_root["bullet"]._x = 350;
} else {
// Нет попадания, пуля летит дальше.
_root [ "bullet" ] ._х -= 5;
}
}
Изменения содержимого экрана с помощью клипов
Урок 22. Изменения содержимого экрана с помощью клипов
К сожалению, Flash не позволяет заменить один клип другам на рабочем поле. Единственным выходом будет удалить один клип и создать на его месте другой. Но если внешний вид клипа должен часто изменяться, необходим более быстрый способ.
Таким способом является создание клипа, который содержал бы все возможные состояния объекта. Например, если объектом является космический корабль, в ролик необходимо включить кадры, изображающие: космический корабль с выключенным двигателем, с включенным главным двигателем, включенным левым двигателем, с включенным правым двигателем, а также ряд кадров, представляющих взрывающийся космический корабль.
Исходный файл: Changingimages.fla
Данный пример демонстрируется в файле Changingimages.fla. Кнопки,расположенные слева от клипа, помогают выбрать отображаемую часть клипа. На Рисунок 3.7 изображен фрагмент ролика.Ввод команд с клавиатуры
Урок 23. Ввод команд с клавиатуры
В предыдущем примере каждой части клипа соответствовала одна из пяти кнопок. Хотя основным средством управления во Hash-роликах являются кнопки, иногда в играх используется и прямой ввод с клавиатуры.
Существует два способа ввода с клавиатуры. Первый подразумевает особый вариант использования кнопок. Второй способ предполагает только код, который проверяет нажатие клавиш в определенный момент времени.
Для применения кнопочного метода создайте обычную кнопку Flash. Она не должна представлять из себя ничего особенного, так как будет расположена за пределами рабочего поля. Если кнопке назначен следующий код, она будет реагировать на клавишу "r" и использовать ее для перемещения клипа:
on (keyPress "r") {
circle._x++;
}
Имейте в виду, что событие keyPress чувствительны к регистру. Это значит, что если кнопке назначена клавиша "r", она не будет реагировать на нажатие комбинации Shift+R.
Исходный файл: Keyboardbutton.fla
ДЛЯ обозначения движений лучше использовать клавиши с изображением стрелок, а не буквы. Для указания данных клавиш используется специальный синтаксис. Ниже приведен сценарий, позволяющий пользователю перемешать клип в четырех направлениях. Вы можете также найти данный сценарий в файле Keyboardbutton.fla.on (keyPress "") {
circle._x++;
on (keyPress "") {
circle._x—-;
on (keyPress "") {
circle._y--;
on (keyPress "") {
circle. _у++;
} }
Если для проверки нажатия клавиши используется кнопка, при удерживании клавиши пользователем действие будет повторяться. Это происходит потому, что большинство компьютеров запрограммировано на повторение при удерживании клавиши. Время между первым и вторым нажатием одной и той же кнопки, а также между последовательным нажатием разных кнопок определяется параметрами настройки клавиатуры системы пользователя. В играх, где пользователь может удерживать кнопку для повторения действия, не следует полагаться на функциональные возможности клавиатуры. Лучше применять функцию Key. isDown (), которая рассматривается в данном разделе.
Функция Key. isDown () позволяет проверить состояние клавиши. Например, чтобы проверить, нажата ли клавиша "r", используется следующий код:
if (Key.isDown("г") ) {
circle._x++;
}
Исходный файл: Keyisdown.fla
Такой код не может и не должен быть назначен кнопке. Он должен быть назначен клипу "actions", в данном случае в файле Keyisdown.fla. Код находится внутри программы обработки onClipEvent (enterFrame), поэтому проверка происходит в каждом кадре. Код проверяет нажатие клавиш с изображением стрелок, которые обозначаются специальными константами наподобие Key.RIGHT.
onClipEvent(enterFrame) {
if (Key.isDown(Key.RIGHT)) {
_root.circle._x++;
}
if (Key.isDown(Key.LEFT) {
_root.circle._x--;
}
if (Key.isDown(Key.UP)) {
_root.circle._y--;
}
if (Key.isDown(Key.DOWN) {
_root. circle._y++;
}
}
Итак, когда же отдать предпочтение кнопке, отзывающейся на нажатие клавиши, а когда объекту Key? Если нажатие клавиши необходимо только для активации события, используйте кнопку. Она будет реагировать на нажатие клавиши в 100% случаев. Функция Key.isDown() отреагирует на нажатие клавиши, только если она вызвана. Поэтому, если пользователь нажмет и тут же отпустит кнопку, нажатие может быть пропущено. Это часто происходит на медленных компьютерах.
Функцию Key.isDown() лучше использовать для контроля движения. В данном случае плавное движение будет продолжаться на протяжении всего времени удерживания клавиши. Функция может воспринимать одновременное нажатие нескольких клавиш, в то время как кнопка реагирует только на нажатие одной клавиши.
Воспроизведение звука
Урок 24. Воспроизведение звука
Завершая вводную часть нашего учебника по ActionScript, рассмотрим использование звука. Flash может воспроизводить звуки, помещая их временную шкалу ролика или клипа. Вы также можете запускать воспроизведение звука при помощи команд ActionScript.
Запуск звука из библиотеки представляет собой несколько более сложную процедуру, чем просто вызов одной команды. Прежде всего, необ холимо убедиться, что звук включен в конечный swf-файл. Это можно сделать в диалоговом окне Symbol Linkage Properties. Сам процесс был, рассмотрен на уроке 20 "Управление несколькими клипами". В данной случае предположим, что звук связан с именем "beep".
Воспроизведение звука задается при помощи нескольких строк кода. Сначала надо создать объект типа Sound. Затем объекту необходимо сообщить что "beep" - это звук, который должен воспроизводиться. Потом следует запустить звук. Вот как будет выглядеть код внутри сценария кнопки:
on (press) {
mySound = new Sound();
mySound.attachSound("beep");
mySound.start();
}
Функция start, которая используется со звуками, может включать два параметра. Первый - это задержка времени в секундах перед началом воспроизведения звука. В случае, если вы хотите пропустить первые три секунды, значение параметра будет 3. При обычном воспроизведении устанавливается 0. Вторым аргументом является количество циклов звука. Для воспроизведения 10 звуковых сигналов подряд используется значение 10.
Существует множество возможностей настройки звука. Наиболее важной из них является регулирование громкости. Если звук слишком громкий, вы можете изменить код ActionScript, а не переделывать звук. IДля настройки громкости, значение которой варьируется от 0 до 100, используется функция setvolume. Ниже приведен тот же самый код, но с уменьшенным вполовину значением громкости:
on (press) {
mySound = new Sound();
mySound.attachSound("beep");
mySound.setVolume(50);
mySound.start();
}
on (press) {
mySound = new Sound();
mySound.attachSound("beep");
mySound.setPan(-100);
mySound.setVolume(100);
mySound.start();
}
Исходный файл: Sound.fla
Ролик Sound.fla содержит четыре кнопки. Большая кнопка в центре отвечает за обычное воспроизведение звука. Большие кнопки слева и справа предназначены для воспроизведения звука только из левой или из правой колонки. Маленькая кнопка в центре воспроизводит звук с громкостью 50%.Вы узнаете больше о звуках в разделе "Музыкальный автомат" главы 6 "Игрушки и безделушки", а также в разделе "Музыкальный микшер" главы 7 "Игрушки-конструкторы".
На этом мы закончили изучение основ ActionScript. В следующей главе вы узнаете о таких приемах программирования, как планирование, отладка и тестирование. Затем, начиная с главы 5 "Создание визуальных эффектов", мы начнем рассматривать примеры программ.
В панели Properties можно присвоить
Рисунок 3.1 В панели Properties можно присвоить имя копии клипа
Вы наверняка заметили, что копия клипа имеет такое же имя, как и клип в библиотеке. Обычно это делается при создании одной копии клипа. Имя копии легче запомнить, если оно совпадает с именем объекта библиотеки.
Библиотека ролика, рассматриваемого в примере, также содержит пять кнопок. Они помешены на рабочее поле под копией клипа. Присваивать имена копиям кнопок необязательно, впрочем, вы и не сможете этого сделать. В любом случае код не может ссылаться на кнопку, поэтому в имени нет необходимости.После добавления клипа и пяти кнопок рабочее поле будет иметь при мерно такой вид, как показано на Рисунок 3.2. Кнопки не только выглядят, но и используются как кнопки управления видеомагнитофоном.
Анализ задачи
Анализ задачи
Важно осознать, что если задача кажется слишком большой, чтобы с ней справиться, по-видимому, она таковой и является. Разбейте ее на более мелкие задачи, и вы найдете решение.
Достоинства
Достоинства
Flash имеет множество преимуществ над другими средами разработки игр. Несмотря на то, что программирование на языках низкого уровня, типа C++ или Java, более эффективно, оно не способно превзойти Flash в следующих областях: • быстрая разработка - Flash позволяет создавать игры от начала до конца всего за несколько дней или даже часов;
• мультимедиа - Flash дает возможность импортировать и использовать различные типы графических изображений и звуковые форматы. Вы можете сотрудничать с художниками и звуковыми дизайнерами, не заботясь о необходимости конвертации файлов или каком-либо их изменении для использования в игре;
• простота использования - Flash очень прост в использовании. Такие функции как "drag and drop", меню команд ActionScript, панели и диалоговые окна позволяют быстро добавлять и изменять элементы и тратить минимум времени на утомительные процедуры;
• подача результатов вашей работы - несомненно, самым большим преимуществом Hash является способ подачи результатов вашей работы. Благодаря Flash-плагину для браузеров она может быть представлена на Web-странице для просмотра всеми желающими. Кроме того, вы можете создавать автономные проекты (просто отдельные swf-файлы), которые могут быть просмотрены практически на любом компьютере Мае или PC. Более важно осознать недостатки, а не достоинства Flash. Вы не сможете создать очередной Quake или Age of Empires. С другой стороны, ваша игра будет иметь более широкую аудиторию и возможность более легкого распространения, чем эти крупнобюджетные игры.
Flash и игры
Flash и игры
Изначально программа Flash предназначалась не для создания игр, а для подготовки анимаций и интерфейсов Web-сайтов. Возможность создания настоящих игр во Flash появилась только с введением ActionScript.
Фон
Фон
В некоторых играх графические изображения занимают весь экран. Другие игры занимают только часть экрана, при этом остается место для красочного фона.
Участниками большинства игр, рассматриваемых в данной книге, являются лисенок и его друзья. В качестве окружающей лисенка обстановки используется фон, изображающий лес и отдельные деревья.
Глобальные и локальные переменные
Глобальные и локальные переменные
Имейте в виду, что если перед первым использованием переменной в функции не стоит ключевое слово var, то переменная является глобальной. В случае использования аналогичного имени переменной в другом месте функции ее значение может заменить значение предыдущей переменной. Допустим, вы используете переменную i в цикле for, а затем внутри данного цикла вызываете другую функцию, которая использует переменную i для своего цикла for. В таком случае значения переменных будут наложены друг на друга, и для того чтобы избежать этого, используйте разные имена переменных или синтаксическую структуру var.
Вы узнали много об ActionScript из глав 2 и 3, а также об общих приемах программирования из данной главы. Теперь вы готовы перейти к главе 5 "Создание дизайнерских эффектов при помоши ActionScript" и далее, к более сложным примерам программ на ActionScript.
Имена клипов
Имена клипов
Каждый клип, расположенный на рабочем поле, имеет два имени. Имя под которым он включен в библиотеку, не имеет никакого значения вашего кода. В отличие от него имя экземпляра клипа на рабочем поле является крайне важным. Часто разработчики вообще забывают присвоить имена экземплярам клипа.
Изменение графики
Изменение графики
Простейшим способом изменения игр для последующего размещения на Web-сайте является изменение графики. Вы можете использовать различные эталоны библиотеки и перерисовывать графические изображения или копировать изображения из ранее созданных Flash-роликов. Не изменяя код и не выполняя программирования, вы можете создавать довольно приличные игры.
Изменение игр рассматриваемых в данной главе
Изменение игр, рассматриваемых в данной главе
Одна из причин, по которым стоило купить данную книгу, - тот факт, что вы можете использовать рассматриваемые в ней игры для создания своих собственных. Вы наверняка захотите изменить игры таким образом, чтобы они лучше подходили для вашей задачи и отражали ваш стиль.
Изменение кода ActionScript
Изменение кода ActionScript
В конце большинства примеров данной книги вы найдете советы по улучшению соответствующего проекта. Можно считать их своего рода упражнениями в ходе изучения программирования на ActionScript. Конечно, вы можете использовать и свои идеи по изменению игр.
Однако учтите, что добавление функциональных возможностей или изменение игры требует среднего или продвинутого уровня знаний. В случае, если вы не знаете, как внести необходимое изменение, не спешите продолжать и изучите необходимую информацию. В противном случае игра может не получиться.
Элементы игры
Элементы игры
Хотя каждая игра индивидуальна, некоторые элементы различных игр являются общими. При планировании игры следует рассмотреть каждый из этих элементов.
Недостатки
Недостатки
Конечно, Flash не является идеальной средой для разработки игр. Ниже приведены причины, усложняющие программирование игр: • построение вокруг временной шкалы - Flash-ролики представляют собой последовательность кадров на временной шкале. Хотя Flash является идеальной средой для создания анимаций, структура игр противоречит прямолинейному движению по временной шкале от кадра к кадру;
• медленная работа - по сравнению со своим старшим братом, Macromedia Director, Flash недопустимо медленная программа для разработчиков. Это ограничивает применение Flash для создания парных игр и игр-аркад с небольшим количеством простых элементов;
• двумерность - Flash не предусматривает создания трехмерной графики, а большинство игр сейчас использует именно 3D-rpaфику. Хотя некоторые программы способны импортировать 3D. графику во Flash, фактически результат все равно содержит лишь плоские изображения, прорисованные с трехмерных фигур. В настоящее время 3D является общепринятым графическим стандартом для игр. Тем не менее данный стандарт не распространяется на сетевые игры, которые обычно создаются с помощью Flash;
• ограниченный набор свойств - предположим, вы хотите добавить в игру какую-либо функцию и обнаружили, что Flash не может ее обработать. Если бы вы составляли программу на языке программирования более низкого уровня, например C++ или Java, у вас была бы возможность добавить эту новую функцию. Однако Flash - это Flash. Только Macromedia может включать новые функции во Flash. Это значит, что при создании игры необходимо идти на компромисс, особенно если ваша игра выходит за пределы возможностей Flash.
Нижнее подчеркивание
Нижнее подчеркивание
Небольшой ошибкой является пропуск нижнего подчеркивания (_) перед большинством встроенных параметрово Flash. Допустим, у вас есть клип под названием "myMovieClip". Тогда myMovieClip._x будет обозначать его горизонтальное положение, но myMovieClip.х - просто переменную х внутри клипа "myMovieClip".
Объединение игр
Объединение игр
Обычным приемом программистов является объелинение двух уже существующих игр целью создания новой. Вы можете попробовать создат такую игру, используя игры данной книги. Однако эта задача требует опыта программирования, поэтому не расстраивайтесь, если все сразу не получится.
Следующий раздел поможет всем, кто собирается изменять игры, избежать распространенных ошибок.
Окно загрузки
Окно загрузки
Ролики Flash загружаются в браузер пользователя потоком. Это значит, что их воспроизведение начинается только после загрузки первой части ролика и с таким расчетом, что ко времени начала воспроизведения второй части он уже будет полностью загружен. Все происходит aтоматически, хотите вы этого или нет.
Автоматическая загрузка данных хороша для анимации, но не всегда для игр. В большинстве случаев ActionScript контролирует появление элементов на рабочем поле и не контролирует анимационную временную шкалу. Flash недостаточно умная программа, чтобы понимать, какие элементы вам нужны в первую очередь, и часто не загружает их во время передачи данных.
По этой причине в играх следует избегать автоматической загрузки. Лучше сделайте первый кадр или сцену ролика окном загрузки. Окно загрузки отображает сообщение для пользователя и не переходит дальше, пока не будет загружен весь ролик. Это предоставляет вам полный контроль над элементами, которые видит пользователь и не ставит вас в зависимость от того, какие элементы загружены, а какие нет.
Более подробно о создании окон загрузки рассказано в главе "Сложные приемы" .
Окно завершения игры
Окно завершения игры
Очень часто конец игры оформляется в виде специального окна. В некоторых играх в случае выигрыша загружается одно окно, в случае проигрыша - другое. Необязательно игры заканчиваются выигрышем или, проигрышем, некоторые из них завершаются в случае, если игрок истратил все боеприпасы, жизни или время. Иногда окно завершения игры отображает список игроков, набравших самое большое количество очков, и дает игроку возможность внести свое имя в данный список. Создание списка победителей рассматривается в главе "Сложные приемы".
Отладка
Отладка
Всем программистам приходится отлаживать создаваемые ими программы. Невозможно добиться безупречной работы программы при ее первом запуске. Хороший специалист должен уметь отлаживать программу.
Помимо использования отладчика ActionScript, отладку можно производить различными способами. При пробном воспроизведении ролика в окне Output могут появляться сообщения об ошибках. Иногда этого достаточно, чтобы вы поняли, в каком месте кода у вас проблемы.
Информация о программе может также размещаться в окне Output при помоши команды trace. Она поможет вам отследить определенные моменты программы и значение некоторых переменных в эти моменты.
Если же вы хотите воспользоваться программой отладки, советуем вам изучить соответствующую информацию в руководстве по Flash MX. Программа отладки является простым инструментом, позволяющим отображать значения переменных во время воспроизведения Flash-ролика. Однако она не в состоянии творить чудеса; программа отладки может только помочь вам разобраться в собственном проекте.
Правила
Правила
Важным элементом игры являются правила. Во многие игры можно играть и без правил, однако о них стоит позаботиться, так как некоторым людям нравится их читать.
В других играх правила могут располагаться в отдельном окне. Если игра сложная, правила иногда излагаются в нескольких окнах, представляющих своего рода учебник.
Еше один вариант - вообще не включать правила в игру. Правила некоторых моих игр содержатся на отдельной HTML-странице Web-сайта. При этом пользователь получает возможность открыть правила в отдельном окне и просматривать их, не отвлекаясь от игры. Это также позволяет предоставлять правила на других языках.
Правила программирования
Правила программирования
Во время изучения программирования следует придерживаться некоторых правил, которые помогут облегчить вашу работу. Эти правил выполняют программисты всего мира, использующие все языки программирования: • комментарии - следует приобрести привычку добавлять к коду комментарии. Даже строки, кажущиеся ясными в данный момет могут стать непонятными, если вы вернетесь к ним через месяц;
• имена переменных - используйте имена переменных, отражюшие их назначение. Они дополнят комментарии и помогут понять код, когда вы вернетесь к нему позднее;
• имена функций - все вышесказанное относится и к именам функций. Они должны описывать выполняемые ими действия;
• чем короче, тем лучше - во Flash нет ограничения на длину функции. Тем не менее, если вы напишите функцию длиной в 100 строк, позднее вам будет непросто ее редактировать. Лучше разбить функцию на задачи и поместить каждую задачу в отдельную функцию;
• включайте в код многократно используемые функции - во время программирования не забудьте подумать о том, как можно применить ту или иную функцию к схожей или аналогичной задач другой части вашей программы. Допустим, вам необходима функция, добавляющая одно очко к счету игрока. Постарайтесь использовать в ней параметр , позволяющий добавлять к счету не только одно, но и любое другое количество очков;
• старайтесь обходиться без жесткого кодирования - под жестким кодированием подразумевается включение в ваш код конкретных чисел. Допустим, для описания правой стороны рабочего поля в вашем коде используется значение 550, оно будет жестко закодировано в программу. Если вы решите расширить рабочее поле ас 600 пикселов, вам придется изменять каждое употребление значения 550 в коде. Лучше в самом начале задать переменной под названием screenRightSide значение 550 и использовать эту переменную на протяжении всей программы;
• хорошая организация - хороший программист, несомненно, должен уметь организовывать различные элементы программы. На-пример, функции следует помешать не в разные кадры, а в один кадр вашего ролика. Кроме этого, старайтесь сгруппировать функции согласно выполняемым ими задачам.
Программирование
Программирование
Не думайте, что изучив главу "Введение в ActionScript" и главу "Элементы ActionScript" для создания игр", вы уже научились программировать. Существует разница между умением создавать код на ActionScript и опытом программирования.
Большинству людей программирование дается трудно, мне легко. Но у меня научная степень по вычислительной технике и я занимаюсь программированием уже 18 лет. Не имея аналогичного опыта, не следует ожидать быстрых результатов.
Вот некоторые принципы, руководствуясь которыми, вы сможете научиться программировать. Как и любой навык, программирование требует времени для изучения. Вы обнаружите, что чем больше вы программируете, тем легче оно вам дается.
Распространенные ошибки
Распространенные ошибки
Независимо от того, изменяете ли вы игру или создаете свою собственную, время от времени вы будете сталкиваться с ошибками. Обычно это несерьезные ошибки, которые легко обнаружить и исправить. Вот некоторые ошибки, с которыми я столкнулся при создании игр во Flash.
Splice и Slice
Splice и Slice
Еше одна ошибка - случайное использование в массиве функции slice вместо функции splice, предназначенной для удаления элемента массива. Пропущенное "р" может ускользнуть от вашего взгляда, а разница выполняемых функций приведет к возникновению ошибок.
Свойства связи
Свойства связи
Если для создания копий эталона используется команда attachMovie, необходимо выполнить соответствующие настройки в диалоговом окне Symbol Lynkage Properties, в том числе присвоить ему имя. Таким образом, присвоить клипу имя можно тремя способами: в библиотеке, в копии клипа на рабочем поле, а также в диалоговом окне Symbol Linkage Properties.
Тестирование
Тестирование
Следующим этапом отладки является тестирование ваших игр другими людьми. Тестирование является важным аспектом, особенно, если игра разрабатывается вами на профессиональном уровне. Будучи программистом, вы не сможете объективно оценить работу своего детища и его недостатки.
Вы наверняка узнаете много нового, когда кто-нибудь в первый раз начнет играть в вашу игру. Вы даже и не представляли себе, что он будет щелкать по таким элементам. Он может перетаскивать элементы за пределы рабочего поля или помешать туда, где их не должно быть.
Обычно перед официальным представлением широкой аудитории игра проходит два этапа проверки. На первом этапе (альфа-тестирование) игра тестируется вашими коллегами или друзьями. Бета-тестирование осуществляется людьми, не имеющими отношения к вашей компании или сети. На обоих этапах вы должны получать сообщения об обнаруженных проблемах и по мере их исправления выпускать обновленные варианты игры.
К сожалению, часто при синтаксически верном коде программа выдает неожиданные результаты. Например, поскольку Flash не нуждается в специальном объявлении переменных, то он запросто съест имя несуществующего объекта (вы вполне могли ошибиться при вводе имени) и будет честно выполнять все назначенные ему действия
Дефектами программы считаются не только ошибки, но и несоответствуюшее содержание игры, и отсутствующие функции. Постарайтесь максимально усовершенствовать свою игру, прежде чем заявлять о том, что она закончена.Титульное окно
Титульное окно
Титульное окно представляет собой красочную заставку, представляющую игру пользователю. Иногда я позволяю своим иллюстраторам вволю поэкспериментировать, чтобы создать действительно эффектную заставку.
Вспомните старые игровые автоматы 80-х. Хотя графика самой игры могла отображаться большими пикселами, автомат обычно был оформлен детально и красочно. Это один способ представления статичных элементов титульного окна.
Другой способ - расположить часть графических изображений и клипов игры вокруг названия. Используя для заставки графику из игры, вы сможете избежать увеличения размера файла игры.
Уровни клипа
Уровни клипа
Еще одной распространенной проблемой является место расположения переменной. Например, если переменная включена в сценарий, назначенный клипу, она будет находиться на уровне этого клипа, а не на уровне главной временной шкалы. Для обрашения ко всем переменным вашего ролика используется точечный синтаксис, однако место расположения переменной можно легко забыть.
Вопросы авторских прав
Вопросы авторских прав
Теперь, зная основы ActionScript, вы планируете заново создать вашу любимую игру 80-х, я прав? А вы когда-нибудь задумывались о том, что она может охраняться авторским правом?
Разместив что-либо на своем Web-сайте или сайте вашей компании, вы становитесь издателем. В издательском деле принято защищать свою работу от копирования. Если вы воссоздадите существующую игру и разместите ее на Web-сайте, на вас могут подать в суд за нарушение закоь об авторских правах.
К вопросу авторских прав разные компании относятся по-разному. Некоторые заявляют о своих правах даже на идеи популярных жанров компьютерных игр. Другие компании не беспокоятся о том, что их игры копируются и даже имеют в точности такие же названия, как и оригиналы.
Если вы считаете, что ваша игра похожа на одну из ранее опубликованных, проконсультируйтесь с юристом. Судя по моему опыту, юристы дают один из двух советов. Они могут объяснить вам, что это непростой вопрос, и вы должны быть осторожны. Вряд ли этот совет принесет пользу. Другим советом будет не рисковать и вообще не публиковат игру. Здесь есть здравый смысл, поскольку вы спрашиваете юриста о том, как избежать проблем, и он советует вам, как это сделать. Тем не менее данный совет не решит вашей проблемы в случае, если вы собираетесь создавать игры.
Первым делом необходимо ознакомиться с игрой, которую вы собираете создавать. Например, разработчиком игры "Othello" является производитель игрушек, которому наверняка не понравится, если вы создадите под тем же названием. Однако игра "Reversy" - это та же игра. "Reversy" считается игрой старого образца, наподобие "Chess" или "Checkers", Вопрос с другими играми более очевиден: "Scabble" запрещено копировать,если у вас нет разрешения владельца. "Backgammon" может свободно распространяться и копироваться. Другое дело - игра "Yahtzee", принадлежашая компании Milton Bradley, хотя ей предшествуют аналогичные игры "Poker Dice Yacht", считающиеся эталоном.
Задача данного раздела - поставить вас в известность о существовании подобной проблемы. Тем не менее, я не могу предложить другого выхода, кроме обращения к юристу.
Имейте в виду, что игры, рассматриваемые в данной книге, предназначены для использования в этом и других вариантах на вашем Web-сайте и в других проектах. Все эти игры являются общими концепциями, наподобие головоломок.