Ваш аккаунт: пройдите авторизацию

Авторизация

Пароль есть, но Вы его забыли?
Впервые на сайте? Зарегистрируйтесь!

Вы попали в мир графики и дизайна


Изюминка нашего сайта в том, что все файлы хранятся на наших серверах, поэтому Вы получаете круглосуточный доступ ко всем файлам по прямым ссылкам без регистрации! С нашим сайтом Вы забудете про файлообменники!


3D туннель


Научимся как создать стильный 3D туннель с помощью Actionscript 3.
Настройка окружения

1. Создайте новый документ Flash размером 400×300.

2. Нарисуйте круг размером 30×30. Я использовал #ff8800 для цвета обводки и #ffffff для цвета заливки.

3. Конвертируйте круг в муви клип. Назовите его “MyCircle” и установите точку регистрации в центре. Сейчас вы должны увидеть подобно этому.
alt
4. Свяжите муви клип с классом по имени “MyCircle“.

5. Удалите мувик- круг со сцены. Мы создадим и расположим все круги средствами Actionscript 3.

Идем в Actionscript 3

6. Создайте новый слой для actionscript и напишите следующее.
CODE

//Максимальная глубина для кругов
const MAXIMUM_Z:Number = 1500;

//Создаем массив , который будет содержать все круги
var circles:Array = new Array();

//Focallength определяет, насколько видна перспектива (вы можете поиграть с
//этим значением, чтобы увидеть эффект самим).
var focalLength:Number = 300;

//Точка исчезновения - это точка, где сходятся объекты.
//Итак когда объект действительно далеко, его координаты
//почти равны точке исчезновения.
var vanishingPointX:Number = stage.stageWidth / 2;
var vanishingPointY:Number = stage.stageHeight / 2;

//Радиус туннеля
var radius:Number = 120;

//Начальная глубина для первого круга
var startingDepth:Number = MAXIMUM_Z;

//Начальный угол для кругов
var startingAngle = 0;

//Установим угловую скорость
var angleSpeed:Number = 0.05;

//Создадим таймер, который вызывается каждые 0.15 секунд
var timer:Timer = new Timer(150,0);
timer.addEventListener(TimerEvent.TIMER, createCircle);
timer.start();

function createCircle(e:Event):void {

//Создаем новый круг
var circle:MyCircle = new MyCircle();

//Присвоим значение z для круга
circle.zpos3D = MAXIMUM_Z;

//Сохраним угол для этого круга
circle.currentAngle = startingAngle;

//Установим вначале альфа в 0
circle.alpha = 0;

//Добавим круг на сцену вниз display списка
addChildAt(circle, 0);

//Добавим ENTER_FRAME для анимации круга
circle.addEventListener(Event.ENTER_FRAME, moveCircle);
}

//Эта функция вызывается в каждом фрейме
function moveCircle(e:Event):void {

//Присвоим круг локальной переменной
var circle:MyCircle = (MyCircle)(e.target);

//Уменьшим глубину круга (перенесем круг ближе);
circle.zpos3D -= 5;

//Если zpos3D <= -focalLength, мы придем к отрицательному scaleRatio (или мы делим на 0).
//В этой точке мы знаем, что объект уже прошел через нас.
//Поэтому мы удаляем круг.
if (circle.zpos3D<=- focalLength) {

 //Удалим слушатель для ENTER_FRAME  (это функция)
 circle.removeEventListener(Event.ENTER_FRAME, moveCircle);

 //Удалим круг со сцены
 removeChild(circle);
}

//Изменяем текущий угол
circle.currentAngle+=angleSpeed;

//Вычисляем новую 3D x позицию
circle.xpos3D=Math.cos(circle.currentAngle)*radius;

//Вычисляем новую 3D y позицию
circle.ypos3D=Math.sin(circle.currentAngle)*radius;

//Вычисляем коэффициент масштабирования для круга
var scaleRatio = focalLength/(focalLength + circle.zpos3D);

//Масштабируем круг в соответствии с коэффициентом
circle.scaleX=circle.scaleY=scaleRatio;

//Увеличиваем альфа
circle.alpha+=0.01;

//Положение круга на сцене (из 3D в 2D координаты)
circle.x=vanishingPointX+circle.xpos3D*scaleRatio;
circle.y=vanishingPointY+circle.ypos3D*scaleRatio;
}
Вот и всё, в итоге получаем:


Внимание! Вы находитесь на сайте как гость! Зарегистрируйтесь или авторизируйтесь...

Нет времени на регистрацию? Можете войти на сайт через ВКонтакте! Это просто, быстро и удобно!

Похожие материалы

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.