Иллюстрированный самоучитель по созданию Flash-игр

Эффект трехмерности

Функция Math.atan() преобразует линию в угол в радианах. Необходимо указать значение разницы между начальной и конечной точками линии по вертикали, разделенное на значение этой же разницы по горизонтали. Например, если значения координат начальной и конечной точек линии соответственно равны (200, 200) и (275, 250), то,. чтобы получить угол, необходимо записать Math, atan (75/50). Результатом будет значение.9828 радиан, что составляет примерно 56 градусов. В действительности функция Math.atan () немного сложнее, однако данный пример позволит вам создать общее представление о ней.

Опишем каждый шаг вышеприведенного кода:

  1. Задаются координаты х, у и z объекта.
  2. Вычисляется расстояние на плоскости ху от центра координат до проекции объекта на плоскость.
  3. Определяется угол на плоскости ху.
  4. Значение угла увеличивается на величину поворота объекта.
  5. Задаются новые координаты х, у и z с учетом изменения угла.
  6. Задается расстояние от центра координат до объекта на плоскости yz.
  7. Определяется угол на плоскости yz.
  8. Задается наклон плоскости.
  9. Задаются новые координаты х, у и z с учетом наклона.
  10. Центр новых координат имеет значение 0. Для корректировки к ним прибавляется действительное значение центра экрана (в данном случае (275, 200)).
  11. Теперь координаты х и у могут использоваться для отображает объекта на экране. С помощью координаты z можно также снизить яркость объектов, которые должны казаться расположенными дальше от пользователя.

Функция plotPoint преобразует точки с трехмерными координатами в точки с двумерными координатами при помощи ортогональной проекции. Это означает, что перспектива здесь не используется, и объекты находящиеся на дальнем плане, не уменьшаются. Это подходит для моделирования небольших объектов и специальных эффектов, но не годится для создания больших трехмерных сцен.

Углы куба

Теперь приступим к созданию восьми вершин куба. Данные о каждой вершине будем хранить в объекте со свойствами х, у и z. Весь список объектов хранится в массиве.

// Создаем массив из 8 точек для вершин куба,
function makePoints() {
    points = new Array();
    points[0] = {
        x: 30,
        y: 30,
        z: 30
    };
    points[1] = {
        x: -30,
        y: 30,
        z: 30
    };
    points[2] = {
        x: -30,
        y: -30,
        z: 30
    };
    points[3] = {
        x: 30,
        y: -30,
        z: 30
    };
    points[4] = {
        x: 30,
        y: -30,
        z: -30
    };
    points[5] = {
        x: 30,
        y: 30,
        z: -30
    };
    points[6] = {
        x: -30,
        y: 30,
        z: -30
    };
    points[7] = {
        x: -30,
        y: -30,
        z: -30
    };
    // Создаем восемь клипов для вершин куба,
    for (i = 0; i)
        attachMovie("point", "point" + i, i)
}

Данная функция создает восемь клипов из эталона, хранящегося в библиотеке. Имя каждого клипа состоит из слова "point" и числа от 0 до 7. Число соответствует точке массива, которую представляет клип.

Команда attachMovie создает новый клип из эталона, хранящегося в библиотеке. Однако для того, чтобы его можно было воспроизвести во Flash player или на Web-странице, необходимо назначить ему свойство Export for ActionScript. Это можно сделать, выбрав команду Options › Linkage в окне Library. Вы также должны назначить клипу идентификатор. В данном случае назовем его "point".

Кроме точек и функции, преобразующей их координаты в экранное представление, необходимо ввести небольшую функцию, которая бы соединяла линиями полученные точки. Помимо параметров_х и_у каждой точки клипа, задается также параметр _alpha, описывающий уменьшение яркости точек по мере их удаления вглубь экрана.

// Устанавливаем координаты точек и их яркость на экране,
function drawPoints() {
    for (i = 0; i)
        loc = plotPoint(points[i]);
    this["point" + i]._x = loc.x;
    this["point" + i]._y = loc.y;
    this["point" + i]._alpha = loc.z + 100;
}

Все вышеупомянутые функции должны помешаться в главную временную шкалу. Следующие строки вводят модель и подготавливают переменную rotation.

// Вызываем функцию инициализации и останавливаем
// воспроизведение ролика в этом кадре,
rotation = 0;
makePoints();
stop();
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.