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

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

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

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

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

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

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

для переменной, с которыми уравнение действительно. Простейший пример: х
2 = 4. Это квадратное уравнение с двумя решениями: 2 и -2. Существует
формула, называемая формулой квадратов, которая используется для
нахождения двух решений квадратного уравнения. Используя а*Г + b*t+c = 0
в качестве примера, решаем уравнение для t:
t =¦
t =
- b + д/b 2 - 4
b 2 - 4 * a
В примере "окружность - окружность", представленном в этом разделе,
квадратное уравнение было преобразовано до такой степени, пока оно не
было записано в стандартной форме для квадратного уравнения. Так его
легче решить.
Давайте посмотрим на пример этого на ActionScript. Откройте файл
circle_circle2.fla из папки Chapter05 на CD. В сцене есть два клипа,
balll и balI2. На более фундаментальном уровне ActionScript используется
здесь для выполнения всех перечисленных ниже задач:
1. Определяет объект для каждого клипа для хранения информации об этом
клипе.
2. Определяет функцию, которая обновляет координату клипа в памяти (не
в сцене). Определяет функцию, которая проверяет на столкновение между
двумя шарами (окружностями).
Определяет функцию, которая физически размещает шары на экране.
Создает событие onEnterFrame для вызова всех этих функций в каждом кадре.
Ниже приведен код ActionScript, который определяет объекты.
110
Часть 2. Исследование основ
1 game = ( } ;
2 game.numBalls = 2;
3 for (var i=l ; i<=game.numBalls; ++i) (
4 var name = " b a 11" + i ;
5 game[name] = (};
6 game[name] .clip = root[name];
7 game[name] .xpos = game[name].cl ip. x;
8 game[name] .ypos = game[name].cl ip. y;
9 game[name] .radius = game[name].cl ip. width/2;
10 game[name] .xmov = 0;
11 game[name] .ymov = 0;
12 }
13 game.ba111. xmov = 1;
14 game.ba111 . ymov = 2 ;
15 game.ba112 . ymov = 1;
Сначала мы создаем объект под названием game. Этот объект будет хранить
всЦ остальные объекты, которые мы создаем. Единственная причина для
создания этого контейнерного объекта дате состоит в предохранении сцены
от заполне ния ненужными данными. Мы можем хранить все, что нам нужно, о
шара> в объекте дате. Во второй строке мы устанавливаем переменную
объекта датц которая хранит число шаров, которое мы используем.
Далее мы делаем цикл для каждого шара, создавая для него объект и сохра*
няя информацию об этом шаре в его объекте. Обратите внимание, что мы не
да ем шарам никаких начальных скоростей. В строках 13-15 мы назначаем
шарал, начальные векторные скорости.
Приходим к следующему коду ActionScript:
1 function moveBal1s () {
2 for (var i=l; i<=game.numBalls; ++i) {
3 var ob = game["bal1"+ i] ;
4 ob.tempx = ob.xpos+ob.xmov;
5 ob.tempy = ob.ypos+ob.ymov;
6 }
7 }
Эта функция проходит в цикле по списку шаров (в данном случае лишь два шя
ра) и обновляет их временные позиции в памяти в их текущие позиции плюс
их скорость. Мы еще не обновляем позицию реального клипа в сцене. Я
советуй вам взять в привычку создание временного положения клипа в
памяти, потом*
Глава 5. Обнаружение столкновений
111
что, когда мы начинаем работать с реакциями на столкновения, мы будем
обновлять временное положение клипа (как результат многочисленных реакций
пли сил), возможно, несколько раз, прежде чем действительно изменим
положение клипа в сцене.
Давайте проанализируем пример. Представьте, что вы кодируете игру, в
которой шар отскакивает от стены. Этот шар может перемещаться очень
быстро. Теперь представьте, что в одном кадре шар не сталкивается со
стеной, а в следующем кадре вы обнаруживаете, что половина шара
пересеклась со стеной. Когда это происходит, вы не хотите обновлять
положение шара в сцене для демонстрации этого. Пожалуй, хорошей мыслью
будет обновление положения шара в памяти для отражения того, где шар
должен быть, и затем рисовать шар на экране. Таким образом, если
обнаружено, что шар сталкивается со стеной (не имеет значения, как далеко
он проник в стену), то мы должны обновить положение шара в памяти, так
что шар лишь едва коснется стены. В конце кадра мы рисуем шар па экране,
и это выглядит, как если бы шар лишь слегка касался стены (как мы и
хотим). Ведь в реальной жизни шар не прошел бы сквозь границу стены.
Далее мы создаем функцию для рисования шаров в сцене.
1 function renderBalls () {
2 for (var i=l; i<=game.numBalls; ++i) {
3 var ob = game["bal1"+i];
4 ob.xpos = ob.tempx;
5 ob.ypos = ob.tempy;
6 ob.clip._x = ob.xpos;
7 ob.clip._y = ob.ypos;
8 }
9 }
Эта функция просто устанавливает физическое положение каждого клипа,
используя значения переменных координат объекта х и у, которые
представлены как xpos и ypos.
Теперь (барабанный бой, пожалуйста!) мы дошли до функции, которая
обрабатывает собственно обнаружение столкновения. Это довольно большая
функция, но она следует в точности той же логике обнаружения
столкновений, которую мы обсуждали ранее.
1 function ballToBallDetection (Ы, Ь2) {
2 //set the speed variables
3 var xmovl = bl.xmov;
4 var ymovl = bl.ymov;
Предыдущая << 1 .. 30 31 32 33 34 35 < 36 > 37 38 39 40 41 42 .. 210 >> Следующая