Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Секреты разработки игр в Macromedia Flash MX - Макар Дж.

Макар Дж. Секреты разработки игр в Macromedia Flash MX — М.: КУДИЦ-ОБРАЗ , 2004. — 608 c.
ISBN 0-201-77021-0
Скачать (прямая ссылка): sekretirazrabotkiigr2004.djvu
Предыдущая << 1 .. 53 54 55 56 57 58 < 59 > 60 61 62 63 64 65 .. 210 >> Следующая

(c)Чтобы посмотреть, как это работает, откройте файл character in grid, в
папке Chapter07. Вы увидите новый клип внутри клипа сетки. Это перс наж,
и он имеет имя экземпляра ball. Код ActionScript имеет три дополнения
1. Функция под названием initializeBallQ, которая создает объект для
хранен! информации о персонаже (который является шаром). Эта функция
также сс дает несколько новых переменных в объекте game.
2. Функция под названием moveBall(). Когда эта функция вызывается, он
пер мещает шар в новое положение, если это новое положение допустимо.
на 7. Миры, основанные на плитках___________________________________177
• обытие onEnterFrame. Оно проверяет нажатие кнопки в каждом кадре.
Если очна из кнопок со стрелками нажата, то вызывается функция moveBallQ.
11иже приводится код функции initializeBall():
function initializeBa11() ( game.speed = 3;
I game.path.ball.swapDepths(lOOOO);
4 game.ball = {s tartx : 1, starty:1, clip:game.path.ball}; var x =
(game.ball.startx-1)*game.spacing+game.spacing/2; var у =
(game.ball.starty-l)*game.spacing+game.spacing/2;
I game.ba11.cl ip._x = x;
game .ball.clip._y = y;
9 game.ball.x = x;
10 game.ball.у = у;
1 game.ball.radius = game.ba11.с 1 ip._width/2;
12 }
1ачей этой функции является инициализация всех объектов и переменных,
¦ бходимых для хранения информации о шаре. Строка 2 вышеприведенного
а устанавливает переменную с именем speed в объекте game. Она пред-вляет
собой скорость, с которой шар может двигаться. Если в некотором дре
обнаружено нажатие кнопки, то шар будет перемещен на эту величину,
'¦едующая строка перемещает клип шара на глубину с высоким значением, го
сделано для того, чтобы мы могли видеть шар поверх плиток, которые
I ш добавлены в сцену. Если мы не переместим шар на глубину выше, чем
^бина плиток, то он будет скрыт за плитками. В строке 4 объект с именем
II определяется для объекта game. Этот объект используется для
хранения иформации о мяче, такой, как начальное положение шара и ссылки
на клип, >торый его представляет. Обратите внимание, что мы устанавливаем
обе ременные startx и starty в 1. Это потому, что мы собираемся начать
движе-
ие шара с первой плитки. Следующие две строки используют координаты rtx и
starty для вычисления положения в сцене, где нужно поместить шар. !ы
добавляем game.spacing/2 к обеим координатам, так что шар будет распо-
"кен по центру плитки, а не на ее точке привязки. В строках 9-11 мы со-
раняем координаты шара х и у и его радиус в объекте ball.
Теперь давайте рассмотрим событие onEnterFrame. Мы оставляем функ-ию
moveBallQ до последнего момента.
178
7 if (Key.isDown(Key.UP)) {
8 moveBall("up" ) ;
9 } else if (Key.isDown(Key.DOWN))
10 moveBall("down") ;
11 1
12 } ;
1
2
3
4
5
6
root. onEnterFxame = functionO { if (Key.isDown(Key.R±GHT)) {
moveBall("right") ;
} else if (Key.isDown(Key.LEFT))
moveBall("left") ;
Часть 2 Исследование
Здесь присутствуют два блока проверки условия. Один проверяет нажатие п|
вой или левой стрелки; другой проверяет нажатие стрелки вверх или вниз. Е
обнаружено, что была нажата правая или левая стрелка, вызывается функи
moveBall(), а имя нажатой кнопки передается в нее в виде строки.
Аналогич! если было обнаружено нажатие стрелки вверх или вниз, то
вызывается функи moveBall() и нажатая кнопка передается в нее в виде
строки.
Теперь давайте рассмотрим функцию moveBall(). Она не сложна, но она J
вольно длинна. Это потому, что мы повторяем некоторые виды действий J
каждой клавиши направления (четыре раза).
1 function moveBall(dir) (
2 ob = game.ball;
3 if (dir == "right") {
4 var tempx = ob.x+ob.radius+game.speed;
5 var tempy = ob.y;
6 var cellx = Math.ceil(tempx/game.spacing);
7 var celly = Math.ceil(tempy/game.spacing);
8 var tempCell = game["cel1"+ cellx++cel1 у];
9 if (tempCell.type != 1) (
10 return;
11 } else {
12 ob.x += game.speed;
13 ob.clip._x = ob.x;
14
15
16 17
} else if (dir == "left") (
var tempx = ob.x-ob.radius-game.speed;
var tempy = ob.y;
var cellx = Math.ceil(tempx/game.spacing);
var celly = Math.ceil(tempy/game.spacing);
18
19
n i 7. Миры, основанные на плитках
179
to
11
V
V
14 lb
' b 5 7
9 I 0
i 1 ! 2 S3 4
15
¦;o ; l 42
; з
44
45
46
№7
48
49
50
51
52
1
var tempCell = game [ " cel 111+cellx +"+ cel 1 у ] ; if (tempCell.type
!= 1) (
return;
} else {
ob.x -= game.speed; ob.clip._x = ob.x;
}
else if (dir == "up") {
var tempx = ob.x;
var tempy = ob.y-ob.radius-game.speed; var cellx = Math .
ceil(tempx/game.spacing) ; var celly = Math.ceil(tempy/game.spacing); var
tempCell = game [11 cel 111 +cellx +11 + cel 1 у ] ;
if (tempCell.type != 1) (
return;
} else (
ob.y -= game.speed; ob.с 1 ip._y - ob.y;
lse if (dir == "down") { ar tempx = ob.x;
ar tempy = ob . y + ob.radius + game.speed; ar cellx =
Math.ceil(tempx/game.spacing) ; ar celly = Math.cei1(tempy/game.spacing)
; ar tempCell = game["cell"+cellx + "_"+ celly];
f (tempCell.type != return; else (
Предыдущая << 1 .. 53 54 55 56 57 58 < 59 > 60 61 62 63 64 65 .. 210 >> Следующая