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

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

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

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

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

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

Макар Дж. Секреты разработки игр в Macromedia Flash MX — М.: КУДИЦ-ОБРАЗ , 2004. — 608 c.
ISBN 0-201-77021-0
Скачать (прямая ссылка): sekretirazrabotkiigr2004.djvu
Предыдущая << 1 .. 154 155 156 157 158 159 < 160 > 161 162 163 164 165 166 .. 210 >> Следующая

В строке 12 мы берем координаты шаров в памяти и помещаем их на экрап.1
Если длина массива moving равна 0, то все шары останавливаются и ход
завершается. Когда это происходит, вызывается moveDone(), который
анализирует] результаты ваших ударов и определяет, чей сейчас ход.
Анализ времени выполнения кода
Вы обратили внимание на две строки, закомментированные в нашем
вышеприведенном коде ActionScript (строки 2 и 17)? Если снять
комментарии, они распечатают значение времени в миллисекундах (ms),
которое требуется для полного выполнения всех операторов в событии
onEnterFrame. Приблизительно 24 раза в секунду в окне вывода output
печатается новое число. Это одно из моих наиболее часто используемых
средств, когда необходимо найти способы оптимизации игры. Я использую
данный метод, когда пытаюсь найти самые медленные части скрипта. Я могу
видеть числа, так как рамка разбита и шар-биток ставится как шар в руке,
чтобы посмотреть, делаются ли вещи с разумной скоростью. Что считать
разумной? Вы должны обратиться к вашему собственному опыту, чтобы от-1
ветить на этот вопрос. Но вот точка старта: мы работаем на 24 fps. В 1
секунде 1000 ins - приблизительно 41 ms в кадре. Если распечатываемое
время для вашего события onEnterFrame больше 41 ms, то фильм не будет
воспроизводиться не на полной скорости. Так что у вас возникло бы желание
постараться придерживаться числа ниже 41. Я бы считал разумным иметь в
некоторые моменты более 41 (такие, как разбивание бильярда), но в среднем
не подниматься выше 41.
moveDone()
Эта функция обрабатывает логику для определения, сохранился ли за вами
xo.ij или игра завершена. Когда вы ударяете по шару-битку, отслеживается
несколько цействий игры. Если вы сталкиваетесь сначала с правильным
шаром, то значс*
Глава 18. Девять шаров
471
ние correctFirstHit устанавливается в true. Если 9 шаров забиты в лузы,
то значение nineBallSank устанавливается в true. Эти 4 булевых значения
могут определить, сохраняется ли ваш ход или игра закончена. Если игра
закончена, то этот скрипт также определит, кто победитель:
1 function moveDone() {
2 roundPositions();
3 flagStopped("yes");
4 inPlay - false;
5 var loseTurn = false;
6 var gameOver = false;
7 var scratch = false;
8 if (nineBallSank SS IcueBallSank && correctFirstHit)
9 var gameOver = true;
10 } else if (nineBallSank && (cueBallSank | !correctFirstHit)) {
1
11 var loseTurn = true;
12 var gameOver = true;
13 } else if (!nineBallSank && (cueBallSank 'correctFirstHit)) ( 1 1
14 var loseTurn = true;
15 var scratch = true;
16 } else if ('nineBallSank && IcueBallSank correctFirstHit &&
IballSank) { & &
17 var loseTurn = true;
18 } else if (!nineBallSank && IcueBallSank correctFirstHit &&
ballSank) { & &
19 //you did good
20 }
21 if (gameOver) {
22 if (loseTurn) {
23 if (game.myTurn) {
24 iWin = false;
25 } else (
26 iWin = true;
27 )
28 ) else {
29 if (game.myTurn) {
30 iWin = true;
31 } else (
32 iWin = false;
33 >
34 1
35 popup.gotoAndStop("game over");
36 if (iWin) (
472
Часть 2 Исследование основ
37 popup.msg.text = "You win!";
3 8 } e1s e {
39 popup.msg.text = "You lose!";
40 }
41 } else if (loseTurn) {
42 i game.myTurn = game.myTurn ? false : true;
43 if (scratch) {
44 game.balll.x = (game.middle+game.1eft)/2;
45 game.balll.y = (game.top+game.bottom)/2;
46 game.balll.clip._x = game.balll.x;
47 game.bal11.cl ip._y = game.balll.y;
48 game.bal11.clip._visible = true;
49 }
50 }
51 moveVariables();
52 if (game.myTurn && IgameOver && Iscratch) (
53 initializeStick();
54 } else if (game.myTurn && scratch) {
55 ballln Ha n d("full"),
56 )
57 }
Первое, что мы делаем в moveDone(), - это вызов функции
roundPositions(),j
(См. вставку на следующей странице, в которой описывается,
зачем нужна nil
функция.) Затем мы устанавливаем значение playerlstopped или
player2stoppe<J в "yes" на сервере. Помните, что эта переменная
представляет состояние экрана-' Когда она установлена в "yes", это
означает, что оба экрана синхронизирована и остановлены. После
инициализации нескольких переменных, используемы^ функцией, мы вступаем в
большой условный блок. Мы проходим через серию >c-J ловий (строки 8-20)
для определения результата удара, который был только 4iJ сделан. Если 9-й
шар забит, и наименьший шар был удален первым, и вы не прН мазали, то
игра закончена и вы победили! Если 9-й шар попал в лузу, но вы ошнЯН
лись, или неправильно попали в первый шар, то игра закончена и вы
проиграли Если 9-й шар не попал в лузу и вы ошиблись, то вы теряете ваш
ход. Если вы "*•' гнали шар в лузу и не сделали ошибки, ход по-прежнему
остается за вами.
Далее у нас идет другой условный блок, который проверяет, закончена ли ш-
1 ра (строки 21-50). Если игра закончена и кто бы то ни было выполняющий
удар ( потерял свой ход, то этот игрок проиграл. Если бьющий игрок не
потерял своМ ход, то он выиграл. Если игра не закончена, но текущий игрок
Предыдущая << 1 .. 154 155 156 157 158 159 < 160 > 161 162 163 164 165 166 .. 210 >> Следующая