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

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

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

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

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

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

Макар Дж. Секреты разработки игр в Macromedia Flash MX — М.: КУДИЦ-ОБРАЗ , 2004. — 608 c.
ISBN 0-201-77021-0
Скачать (прямая ссылка): sekretirazrabotkiigr2004.djvu
Предыдущая << 1 .. 37 38 39 40 41 42 < 43 > 44 45 46 47 48 49 .. 210 >> Следующая

столкновения, обнаружение столкновения точки с прямоугольником подобно
получению моментальных снимков. И если точка движется достаточно быстро,
она может чролететь через прямоугольник без обнаружения столкновения.
Логика обнаружения столкновения между точкой и прямоугольником проста.
Положение точки сравнивается с положением каждой стенки прямоугольника.
Если координата х точки больше, чем координата jc левой стенки, н меньше,
чем координата х правой стенки прямоугольника, а координата у ьольше, чем
координата^ верхней стенки (помните, что ось у во Flash-имеет
противоположное направление), и меньше, чем координата у нижней стенки, Ю
столкновение произошло.
Откройте файл point_rectangle.fla для просмотра примера. В сцене есть
два клипа, point__cl ip 1 и rectangle_clipl. Код ActionScript создает
объект
для хранения информации о точке и прямоугольнике. Затем в каждом кадре
точка перемещается и делается проверка на обнаружение столкновения. Ниже
приводится код ActionScript, использованный для создания объектов.
I .'.34
130
Часть 2 Исследование осно
1 //Create an object to store information about point_clipl
2 pointl = [};
3 pointl.clip = point_clipl;
4 pointl.x = pointl.cl ip._x;
5 pointl.у = pointl.clip._y;
6 pointl.xmov = 3;
7 pointl.ymov = 1;
8 //Create an object to store information about rectangle_clipl
9 rectanglel = {};
10 rectanglel.cl ip = rectangle_clipl;
11 rectanglel.x = rectanglel.clip._x;
12 rectanglel.у = rectanglel.clip._y;
13 rectanglel.width = rectangle1.cl ip._width;
14 rectanglel. height = rectanglel.cl ip._height;
До сих пор вы видели это уже много раз. Мы создаем объект для каждого
клип/ в сцене для хранения информации об этом клипе. Обратите внимание, ч
для прямоугольника мы храним его положение (его точка привязки находит в
верхнем левом углу), а также его ширину и высоту. Далее в коде ActionScri
есть две функции: одна - для создания временного положения точки в
памятт! и другая - для положения клипа в сцене. Мы не будем здесь
перечисля эти функции, поскольку они идентичны тем, которые мы видели уже
несколь раз. Ниже приведена функция is pointRectangleDetection(), которая
обнаружива столкновения между точкой и прямоугольником.
1 function pointRectangleDetection(point, rectangle) (
2 //position of the point
3 var x = point.x;
4 var у = point.у;
5 //left and right walls
6 var xl = rectangle.x;
7 var x2 = xl+rectangle.width;
8 //top and bottom walls
9 var yl = rectangle.y;
10 var y2 = yl+rectangle.height;
11 //check to see if the point is within all of the walls
12 if (x>x1 && x<x2 ss y>yl s& у<y2) (
13 trace ( "Collision Detected !! 11} ;
14 }
15 }
. '.ша 5. Обнаружение столкновений
131
>)икция принимает два параметра, point и rectangle, которые ссылаются на
два ' ъекта. Сначала создаются две переменные, которые представляют
положение Ьчки. Затем в строках 6-10 х- и ^'-координаты стен
присваиваются переменным. Наконец, в строке 12 начинается блок условия,
который проверяет, является ли ордината точки х больше, чем левая стена,
но меньше чем правая стена, и что ордината точки у больше, чем верхняя
стена, и меньше, чем нижняя стена. Ес-н это условие выполнено, то
столкновение произошло, а оператор trace выполнится. Наконец (хотя это не
показано выше), событие onEnterFrame вызывает iv нкции
getTempPositions(), pointRectangleDetection() и render() в каждом кадре.
)бнаружение столкновения'прямоугольника прямоугольником
1одобно обнаружению столкновения точки с прямоугольником, обнаружение
толкновения между двумя прямоугольниками выполняется легко. Rectangle_a
млкивается с rectangle_b, если все из ниже перечисленного истинно:
Координата х правой стенки прямоугольника rectanglea больше, чем
координата х левой стенки прямоугольника rectangle_b.
Координата х левой стенки rectangle a меньше, чем координата х правой
стенки rectangle_b.
Координата у нижней стенки rectangle a больше, чем координата у верхней
стенки rectangleb.
Координата у верхней стенки rectangle_a меньше, чем координата у нижней
стенки rectangle b.
)пи сталкиваются!
Rectangle 1
Rectangle 2
132
Часть 2. Исследование оснс
Для просмотра примера откройте файл rectangle rectangle.fla из паш
Chapter05 на CD. Код ActionScript в этом файле очень схож с предыдущш
примером, поэтому мы рассмотрим лишь функцию, которая обрабатывав
обнаружение столкновения, - RectangleRectangleDetection(). Ниже при1 ден
ее код на ActionScript.
function RectangleRectangleDetection(rectangle_a, rectangle_b) [
2 //left and right walls
3 var x al = rectangle a.x;
4 var x a2 = x al+rectangle a.width;
5 //top and bottom walls
6 var у al = rectangle a.y;
7 var у a2 = у al + rectangle a.height;
8 //left and right walls
9 var x bl = rectangle b.x;
10 var x b2 = x bl+rectangle b.width;
11 //top and bottom walls
12 var у bl = rectangle b.y;
13 var у Ь2 = у bl+rectangle b.height;
14 //check to see if the point is within all of the walls
Предыдущая << 1 .. 37 38 39 40 41 42 < 43 > 44 45 46 47 48 49 .. 210 >> Следующая