Четверг, 28.03.2024, 15:28
Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Создание Flash игр » Adobe Flash » Вращение 3D куба.
Вращение 3D куба.
Vavilov8Дата: Пятница, 29.07.2011, 23:27 | Сообщение # 1
VIP
Группа: Администраторы
Сообщений: 42
Репутация: 0
Статус: Offline


Прочитал урок про вращению куба, который опубликован ниже, и решил сделать урок с более реалистичным кубом. Из этого урока вы научитесь создавать свой 3D куб.

И так. Создаем новый Flash File (ActionScript 3.0) и вставляем в первый кадр данный ниже код. Компилируем. И видем, что у нас перед глазами крутится 3D куб. Ура, товарищи! Урок окончен. Более подробное описание кода дано в коментариях. Всем спасибо.

Code


//Клип, в котором будут находиться вершины куба.
var cube:MovieClip = new MovieClip();
//Координаты куба в сцене.
var X:int = 275;
var Y:int = 200;
//Длина грани куба.
var d:uint = 200;
//Координаты вершин куба.
var corX:Array = new Array(-d/2,d/2,d/2,-d/2,-d/2,d/2,d/2,-d/2);
var corY:Array = new Array(-d/2,-d/2,d/2,d/2,-d/2,-d/2,d/2,d/2);
var corZ:Array = new Array(-d/2,-d/2,-d/2,-d/2,d/2,d/2,d/2,d/2);
//Массив цветов граней куба.
var colors:Array = new Array(0x0000cc, 0x00cc00, 0xcc0000, 0xcccc00, 0x00cccc, 0xcc00cc);
//Массив вершин куба.
var dots:Array = new Array(8);
//Массив граней куба.
var sides:Array = new Array(6);
//Индексы вершин при построении треугольников граней куба.
var indices:Vector.<int> = new Vector.<int>();
indices.push(0,1,2,0,2,3);
//-------------------------------------------------------------------
createCube();
stage.addEventListener(Event.ENTER_FRAME, rotateCube);
//-------------------------------------------------------------------
   
//Функция создания куба.
function createCube():void
{
  //Размещаем наш куб в заданных нами координатах.
  addChild(cube);
  cube.x = X;
  cube.y = Y;
  //Добавляем вершины куба в один МувиКлип, чтобы можно было легко ими вращать в сцене.
  for (var i:uint = 0; i < dots.length; i++)
  {
  //Создаем спрайты, которые будут "контейнером" для вершин куба.
  var p:Sprite = new Sprite();
  p.x = corX[i];
  p.y = corY[i];
  p.z = corZ[i];
  cube.addChild(p);
  dots[i] = p;
  }
  //Создаем грани куба.
  for (var j:uint = 0; j < sides.length; j++)
  {
  var s:Sprite = new Sprite();
  addChild(s);
  sides[j] = s;
  }
  //Отрисовываем куб.
  renderCube();
}
   
//Функция отрисовки куба.
function renderCube():void
{
  //Создаем вспомогательные точки.
  var point:Point = new Point();
  var point3d:Vector3D = new Vector3D();
  //Создаем массивы, которые будут хранить глобальные координаты вершин по Х и У.
  var points2dX:Array = new Array(8);
  var points2dY:Array = new Array(8);
  //Переводим локальные координаты вершин куба в глобальные.
  for (var i:uint = 0; i < dots.length; i++)
  {
  point = dots[i].local3DToGlobal(point3d);
  points2dX[i] = point.x;
  points2dY[i] = point.y;
  }
  //Создаем массив со списками вершин граней.
  var vertices:Array = new Array(Vector.<Number>([points2dX[0], points2dY[0],
  points2dX[1], points2dY[1],
  points2dX[2], points2dY[2],
  points2dX[3], points2dY[3]]),
  Vector.<Number>([points2dX[1], points2dY[1],
  points2dX[5], points2dY[5],
  points2dX[6], points2dY[6],
  points2dX[2], points2dY[2]]),
  Vector.<Number>([points2dX[5], points2dY[5],
  points2dX[4], points2dY[4],
  points2dX[7], points2dY[7],
  points2dX[6], points2dY[6]]),
  Vector.<Number>([points2dX[4], points2dY[4],
  points2dX[0], points2dY[0],
  points2dX[3], points2dY[3],
  points2dX[7], points2dY[7]]),
  Vector.<Number>([points2dX[4], points2dY[4],
  points2dX[5], points2dY[5],
  points2dX[1], points2dY[1],
  points2dX[0], points2dY[0]]),
  Vector.<Number>([points2dX[3], points2dY[3],
  points2dX[2], points2dY[2],
  points2dX[6], points2dY[6],
  points2dX[7], points2dY[7]]));
  //Отрисовываем грани куба.
  for (var j:uint = 0; j < sides.length; j++)
  {
  sides[j].graphics.clear();
  sides[j].graphics.beginFill(colors[j]);
  sides[j].graphics.drawTriangles(vertices[j], indices, null, TriangleCulling.NEGATIVE);
  sides[j].graphics.endFill();
  }
}
   
//Функция ващения куба.
function rotateCube(e:Event):void
{
  //Поворачиваем куб по оси У на один градус каждый кадр.
  cube.rotationY -= 1;
  //Отрисовываем новое положение куба.
  renderCube();
}

 
Форум » Создание Flash игр » Adobe Flash » Вращение 3D куба.
  • Страница 1 из 1
  • 1
Поиск: