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

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

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

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

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

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

Макар Дж. Секреты разработки игр в Macromedia Flash MX — М.: КУДИЦ-ОБРАЗ , 2004. — 608 c.
ISBN 0-201-77021-0
Скачать (прямая ссылка): sekretirazrabotkiigr2004.djvu
Предыдущая << 1 .. 65 66 67 68 69 70 < 71 > 72 73 74 75 76 77 .. 210 >> Следующая

вятся х, у, z). В строке 6 мы создаем переменную под названием speed.
Когда | нажимаете на плитку, персонаж будет пытаться идти туда. Скорость,
с котоя персонаж идет, определяется значением переменной speed.
Далее мы устанавливаем переменную со странным именем feeler. Это требу
небольшого пояснения. В нашем предыдущем файле-примере (как и в этом ле)
объект перемещается вокруг одной указанной точки. Мы все знаем, что irt
сонаж в реальной жизни является трехмерным и, следовательно, характеризуй
ся более чем одной точкой. Если мы используем лишь одну точку, чтобы oujl
делить, куда направляется персонаж, то, когда персонаж находится на кп
плитки, ограничивающей объект, такой, как блок, некоторая часть персона^
все еще находится на предыдущей плитке, но некоторые графические элемаП
перекрывают блок. Это вызывает проблему визуального восприятия, но не I
зывает никакой проблемы для программирования. Все по-прежнему работ.1 но,
возможно, не выглядит так хороню, как вам хотелось бы. Существует сколько
способов для обработки или исключения этой визуальной проблей Наиболее
правильный способ состоит в обращении с персонажем, как если С он был
цилиндром или кубом (как мы предположили в гл. 6 "Реакция на ст<*
новения"). Мы собираемся использовать даже более простой подход - мы бу i
использовать нечто под названием щупальца. Представьте насекомое, pacx.il
вающсе повсюду. Прежде чем основная часть насекомого переместится на
ва 8. Изометрический взгляд на мир
215
ю поверхность, его щупальца вначале проверяют эту поверхность. В нашем
чае мы расширяем щупальца на расстояние 10 пикселей по направлению,
мггором движется персонаж. Если щупальца обнаружили объект в ячейке, ко-
мя близка, но еще не достигнута, персонаж прекращает движение. В этом иле
это работает удивительно хорошо. Щупальца вы видеть не можете; они |яются
просто кодом программы. Вы увидите применение этой техники ункциях
detectObjects() и wor!dClicked()
В строке 11 мы устанавливаем переменную с именем moving. Она всегда бу-
иметь значение true или false. Если true, то персонаж движется.
И строке 13 вызывается функция positionCharacter(). Эта функция обрабаты-
г положение персонажа на экране. Она вызывается здесь, но также вызывает-
м каждом кадре в событии onEnterFrame:
function positionCharacter() (
world.char.х = worId.char.tempx; world.char.у = world.char.tempy;
world.char.z = world.char.tempz;
var temp = isо.mapToScreen(wor1d.char.x, world.char.y, world.char.z);
world.char.clip._x = tempfO]; worId.char.clip._y = temp[l];
'% }
iроках 2 - 4 мы устанавливаем координаты персонажа х, у и z, основываясь
на юкущих временных координатах в памяти. Затем мы используем эти коорди-
i.i для определения координат персонажа х и у на экране, применяя метод
ToScreen() объекта isometricAS. Наконец, мы размещаем персонажа на экра-
Гледующим логическим шагом было бы рассмотрение функции, используе-| для
перемещения персонажа от одной точки к другой. Но в процессе этого кения
происходит обнаружение столкновения путем использования щупа-которые
определяют, вошел ли персонаж в ячейку, содержащую объект, кде чем мы
поговорим о том, как перемещать персонажа, давайте поговорим икциях,
которые создают' объекты на экране и изменяют типы отображае-илиток.
function makeObject(x, z, object) { world.tiles[x] [z]. isObject = true;
world.tiles[x] [z] .clip.objects.gotoAndStop(object);
}
function changeGroundTile(x, z, object) {
216
Часть 2 Исследование ос
6 world, tiles [х ] [т.] .clip. innerTile.gotoAndStop(object) ;
7 }
8 function changeManyGroundTiles(x,
9 for (var i = 0; i<xnum; ++i) {
10 for (var j = 0; j<znum; ++j)
11 world.tiles[x + i][z + j}.clip (object);
12 }
13 }
14 }
Эти три функции довольно очевидны. Первая из них, makeObject(), добав
объект (растение или блок) в плитку. При этом она также устанавливает
свойст isObject в true в массиве tiles. Мы используем свойство isObject
со щупальца когда обнаруживаем столкновение. В следующей функции,
changeGroundTil просто тип отображаемой плитки. Вы можете изменить плитку
с травы на беi или на нечто другое. Функция changeManyGroundTiles()
делает то же са за исключением того, что изменение применяется ко многим
плиткам. Вы зад координаты х и z и затем задаете ширину в каждом
направлении.
Теперь, когда мы рассмотрели обнаружение столкновения, мы можем пе ти к
"следующему логическому шагу", о котором я упомянул выше, - пер щении
самого персонажа. Когда вы нажимаете на кнопку мыши, вызыва корректно
поименованная функция worldCIicked(). Эта функция проецирует ординаты
вашего курсора мыши х и у на плоскость х, -z в изометрическом mi Затем
она берет эти значения и сравнивает их с границами мира. Если ку мыши во
время клика был в пределах границ мира и персонаж уже не двигс то
происходит много вещей. Давайте рассмотрим, что именно.
1 function worldClicked(xm, ym) {
2 var temp = isо . mapToIsoWorId(xm, ym) ;
3 var xm = temp[0];
Предыдущая << 1 .. 65 66 67 68 69 70 < 71 > 72 73 74 75 76 77 .. 210 >> Следующая