
Alternativa3D. Урок 1.

Ну что? Поехали?
Для работы нам понадобится FlashDevelop (ну и что там с ним связано). Так же понадобится Flash IDE (во всяком случае я компилил при помощи флеша).
Устанавливаем FlashDevelop и настраиваем. Я указывал путь до Flash IDE. Для этого идем в Tools->Program Settings->ASCompletion. Находим Path to Flash IDE и прописываем путь:

Теперь создаем проект во FlashDevelop. Для этого идем в Project->New Project, в открывшемся окне выбираем AS3 Project, указываем место сохранения и задаем имя:

Поздравляю, вы на пути к истине! Справа, в дереве проекта, выбираем папку src, в ней находим файл Main.as. Он содержит примерно следующий код:
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
}
}
}
Единственное, что сейчас стоит сделать — это изменить
package{
…
}
наpackage src {
…
}
Теперь идем на сайт Alternativa3D и качаем дистрибутивы. В дистрибутивах нас интересует на данный момент только библиотека swc. Ее мы распаковываем в папку с проектом и кладем в папку lib. Во FlashDevelop в дереве проекта жмем на ней правой кнопкой и выбираем Add To Library:

Далее открываем Flash IDE и создаем проект ActionScript 3.0:

Вначале сохраняем файл в папку с проектом, созданным во FlashDevelop. Теперь идем в свойства флешки. В поле Class вводим src.Main:

Далее жмакаем на кнопку Edit… напротив Profile . В открывшемся окне на вкладке Flash жмем на кнопку Settings…:

В открывшемся окне выбираем вкладку Library path, жмем на красную кнопку и указываем, где лежит наша swc:

На этом наши подготовления закончены и начинается веселье. Открываем файл src/Main.as и меняем существующий код на следующий код (не отлыниваем и вводим ручками, вдумываясь в каждое слово, в каждую буковку и закорючечку):
package src
{
import flash.display.Sprite;
import flash.events.Event;
import alternativa.engine3d.core.Camera3D;
import alternativa.engine3d.core.MouseEvent3D;
import alternativa.engine3d.core.Object3DContainer;
import alternativa.engine3d.core.View;
import alternativa.engine3d.materials.FillMaterial;
import alternativa.engine3d.primitives.Plane;
public class Main extends Sprite
{
//Контейнер - это сцена на которой находятся трехмерные объекты
private var container:Object3DContainer = new Object3DContainer();
//Камера - это камера
private var camera:Camera3D = new Camera3D();
//Без слов
private var plane:Plane;
//Скорость вращения плоскости
private var rotationSpeed:Number = 0.01;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
initAlternativa3D();
}
private function initAlternativa3D():void
{
//Камера производит отображение трехмерного мира
//на двухмерную плоскость. Вот эта плоскость и есть View.
//View еще по-другому называют вьюпорт. View является DisplayObject.
camera.view = new View(stage.stageWidth, stage.stageHeight);
addChild(camera.view);
//camera.diagram - содержит отладочную информацию
addChild(camera.diagram);
//Устанавливаем позиции нашей камеры
camera.rotationX = -120 * Math.PI / 180;
camera.y = -800;
camera.z = 400;
//Добавляем камеру в контейнер
//Камера при рендеринге будет перерисовывать
//все объекты находящиеся с ней в одном контейнере
container.addChild(camera);
//Создание плоскости
plane = new Plane(500, 500);
plane.rotationX = 90 * Math.PI / 180;
//Добавляем событие при щелчке левой кнопкой мыши на плоскости
plane.addEventListener(MouseEvent3D.CLICK, onPlaneClick);
//При наведении на плоскость курсор будет меняться на руку
plane.useHandCursor = true;
//Создаем материал. Материал - это что-то наподобии текстуры.
//В нашем случае мы создаем FillMaterial.
//При создании FillMaterial указываем цвет материала,
//прозрачность, толщину линий обводки полигона и цвет линий.
var material:FillMaterial = new FillMaterial(0xECF936, 1, 1, 0x000000);
//Задаем для плоскости материал.
plane.setMaterialToAllFaces(material);
//Добавляем в контейнер плоскость.
//Теперь она будет отрисовываться во вьюпорт.
container.addChild(plane);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onPlaneClick(e:MouseEvent3D):void
{
//При клике мыши на плоскости мы меняем
//скорость вращения на противоположную
rotationSpeed *= -1;
}
private function onEnterFrame(e:Event):void
{
// Вращение примитива
plane.rotationZ += rotationSpeed;
// Перерисовка содержимого container в camera.view
camera.render();
}
}
}
Ввели? Не копировали? Ну молодцы. Теперь жмакаем F6 и радуемся своей необузданной крутости.

UPDATE: исходники можно скачать тут.
- +6
- kiloT
Комментарии (25)
А так — плюсищее — оч ждал. но до выхода молхила пробывать не буду:)
А попробывать стоит ;) времени не много займет, а +1 к интеллекту прибудет ))))) Если кому надо, могу исходники кинуть на мыло…
Если бы вы создавали во FlashDevelop проект как Flash IDE Project — то да понадобилась бы настройка пути к флешу и запуск на исполнение во FlashDevelop запускал бы проект во флеше.
Кстати создавал во FlashDevelop FlashIDE Project и он был пустым. Не стал заморачиваться дальше.
FlashDevelop может и так запускать во FlashIDE проект через F6.
Вы 2 раза делаете одну и ту же работу по настройке проектов. Уже обсуждали в блоге о разделении графики и кода.
FlashIDE Project — an empty project writen in ActionScript 3 with compiliation using the Flash IDE
AS3 Project — a project writen in ActionScript 3for the flash 9/10 player
Вы создали именно AS3 Project который работает без Flash IDE, в то же время настроили и Flash IDE :)
Мелочи конечно.
И кстати, уроки на какой версии Альтернативы планируется делать? В самой свежей версии например класс Geometry убрали и еще многое поменяли.
Я хз — мне нравится и жду продолжения.