Гэри Розенцвейг - Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
- Название:Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Гэри Розенцвейг - Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript краткое содержание
Данная книга посвящена программированию игр с помощью ActionScript. Здесь вы найдете подробные указания, необходимые для создания самых разных игр – аркад, головоломок, загадок и даже игровых автоматов. В тексте приведены исходные коды программ и детальные, доступно изложенные инструкции. Базовые принципы программирования ActionScript рассматриваются на примере игр, однако вы без труда сможете применить полученные знания и для разработки неигровых проектов, таких как Web-дизайн и реклама. Рекомендации Гэри Розенцвейга помогут вам не только придумывать занимательные игры и размещать их на Web-сайте, но и оптимизировать скорость их работы, а также защищать свои творения от несанкционированного копирования. Представленный в книге код несложно изменить для использования в других программах.
Книга предназначена для широкого круга читателей – создателей анимационных роликов, художников-оформителей, программистов и разработчиков Web-сайтов. Издание может также выступать в качестве практического пособия по изучению ActionScript.
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Когда игрок перетаскивает колышек в новое отверстие, код проверяет, какой ход был сделан: верный или ошибочный. Во-первых, пользователь должен переставить колышек на пустое место, через одно отверстие от текущего. Затем необходимо, чтобы в отверстии, через которое "перепрыгивает" игрок, находился колышек. Если ход удовлетворяет этим условиям, он считается верным. Колышек, через который "перепрыгнули", удаляется с доски.
Подготовка ролика
Для игры требуется всего два клипа: «peg» и «hole». В клипе «peg» должна быть расположена кнопка, которая сообщает основной временной шкале о щелчке мышью (пользователь нажимает и отпускает ее кнопку).
Так как перед началом ролика на рабочем поле нет ни одного клипа, им необходимо назначить свойства связи. Код обращается к ним по именам "peg" и "hole".
Создание кода
Почти весь код находится в одном кадре основной временной шкале. Он начинается с создания экземпляров клипов «peg» и «hole» и их размещения на рабочем поле. С помощью оператора if создаются необходимые для игры отверстия. Также код проверяет, во все ли отверстия, кроме одного в центре, вставлены колышки.
В конце функции переменной maxHoleприсваивается значение, равное количеству всех отверстиях. Эта переменная будет использоваться в тех функциях, где необходимо выяснить, все ли клипы удовлетворяют определенным условиям.initGame();
stop();
function initGame() {
// Определяем постоянное расположение клипов.
holeSpace = 30;
puzzleLeft = 160;
puzzleTop = 80;
// Просматриваем все отверстия и создаем в них колышки.
i = 0;
for(y=0;y<9;y++) {
for (x=0;x<9;x++) {
// Проверяем, должен ли быть создан колышек.
// Если да, создаем его.
if (((y < 3) or (y > 5)) and ((x < 3) or (x > 5))) continue
// Добавляем и размещаем новое отверстие.
attachMovie("hole", "hole"+i, i);
_root["hole"+i]._x = x*holeSpace + puzzleLeft;
_root["hole"+i]._y = y*holeSpace + puzzleTop;
// Не добавляем колышек в центральное отверстие.
if ((x != 4) or (y != 4)) {
// Добавляем и размещаем
// новое отверстие.
attachMovie("peg","peg"+i,100+i);
_root["peg"+i]._x = x*holaSpace + puzzleLeft;
_root["peg"+i]._y = y*holaSpace + puzzleTop;
}
i++;
}
}
// Запоминаем количество колышков.
maxHole = i;
}Когда игрок щелкает по колышку, на самом деле он щелкает по кнопке, расположенной внутри клипа. Оба действия, «press» и «release», передаются функциям в основной временной шкале. Функция dragPegвызывается действием «press». Эта функция сохраняет положение колышка в переменных pegxи pegy,а затем разрешает перемещать колышек. Также она использует функцию swapDepths, чтобы колышек отображался поверх всех остальных.
function dragPeg(peg) {
// Запоминаем исходное положение колышка.
pegx = peg._x;
pegy = peg._y;
// Размещаем колышек поверх остальных.
peg.swapDepths(2000);
// Разрешаем программе Flash перемещать клип.
startDrag(peg, true);
}Функция dropDragвызывается тогда, когда игрок отпускает кнопку мыши при перетаскивании. Сначала клип прекращает перемещение (8). Затем с помощью функции dropDragвыясняется, находится ли какое-нибудь отверстие под курсором (9).
Если курсор мыши расположен над дыркой, следующий шаг – определить, пустое ли отверстие или нет (10). Затем код проверяет отверстия во всех четырех направлениях, чтобы выяснить, из какой дырки мог быть перемещен колышек. Для определения относительного положения отверстия используются переменные dxи dy (11). Например, если игрок перемещает колышек вправо. dx присваивается 1, а dy– 0. Если вверх, то dyбудет равняться -1, а dx– 0. Если отверстие, куда игрок перемещает колышек, не расположено через одну дырку вправо, влево, вверх или вниз, значения dxи dyстановятся равными 0 (12).
Даже если игрок перемещает колышек через одно отверстие, помещает его в пустое место, ход засчитывается только в том случае, если он "перепрыгивает" через другой колышек. Следующий фрагмент кода проверяет, есть ли такой "серединный" колышек (13). Если да, код его удаляет и указывает, что перемещаемый колышек теперь находится в новом месте.
Если одно из этих условий не выполняется, значит, ход неверен. Значение переменной placedостается равным false, оно проверяется в конце функции (14). И колышек возвращается на свое исходное место.function dropDrag(peg) {
(8) → // Клип с колышком больше не перемещается.
stopDrag();
// По умолчанию ход неверен.
placed = false;
overole = false;
(9) → // Определяем местоположение отверстия, над которым
// находится курсор.
for(i=0;i
hole = _root["hole"+i];
if (hole.hitTest(_xmouse, _ymouse)) {
overeHole = true;
break;
}
}
(10) →// Выясняем, свободно ли отверстие.
if (!pegThere(hole._x, hole._y)) {
(11) →// Определяем различие между исходным и конечным
// положениями.
dx = 0;
dy = 0;
if ((pegx == hole._x) and (pegy-holeSpace*2 == hole._y)) {
// сверху
dy = -1;
} else if (pegx==hole._x) and (pegy+holeSpace*2==hole._y)) {
// внизу
dy = 1;
} else if (pegy==hole._y) and (pegx-holeSpace*2==hole._x)) {
// слева
dx = -1;
} else if (pegy==hole._y) and (pegx+holeSpace*2==hole._x)) {
// справа
dx = 1;
}
(12) →// Значения dx и dy будут равны 0, если целевое отверстие
// не находится на необходимом расстоянии.
if ((dx != 0) or (dy != 0)) {
(13) →// Выясняем, есть ли колышек посередине.
midThere = false;
for(i=0;i
mid = _root["peg"+i];
if ((mid._x == pegx + dx*holeSpace) and (mid._y == pegy + dy*holeSpace)) {
// Раз колышек здесь находится,
// значит, ход верный.
// Указываем новое положение колышка.
peg._x = hole._x;
peg._y = hole._y;
// Удаляем колышек посередине.
mid.removeMovieClip();
// Запоминаем, что ход верен.
placed = true;
break;
}
}
}
}
(14) →// Проверяем, верный ли ход был сделан, и если нет,
// восстанавливаем исходное положение колышка.
if (placed) {
peg._x = pegx;
peg._y = pegy;
}
}Функция dropPegиспользует полезную функцию pegThere,которой передается расположение отверстия и которая возвращает значение true, если именно в этом месте обнаружен клип peg.
function pegThere(x.y) {
// Выясняем, находится ли в этом месте колышек.
for (i=0;i
peg = _root["peg"+i];
if ((peg._x == x) and (peg._y == y)) {
return true;
}
}
return false;
}Во время игры внизу экрана все время находится кнопка Restart Game (Начать заново), которая позволяет заново начать игру, когда больше нельзя сделать ни одного действия или когда пользователь понимает, что плохо начал игру. Эта кнопка должна не только вызывать функцию initGame,но и очищать оставшиеся клипы «peg» и «hole».
function restartGame() {
// Удаляем все клипы.
for (i=0;i
_root["peg"+i].removeMovieClip();
_root["hole"+i].removeMovieClip();
}
// Начинаем новую игру.
initGame();
}Код, прикрепленный к кнопке, расположенной внутри клипа «peg», очень прост. Все, что он делает, это передает функциям действия press и release.
on (press) {
_root.dragPeg(this);
}
on (release) {
_root.dropPeg(this);
}Другие возможности
Главный способ изменения игры – создание другой доски. Существует множество вариантов, например, колышек можно перемещать не только по вертикали и горизонтали, но и по диагонали. В данном случае нужно переписать код.
Читать дальшеИнтервал:
Закладка: