Пример скрипта :
<OBJECT CLASSID='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' WIDTH=400 HEIGHT=300><param name='wmode' value='transparent'><PARAM NAME=MOVIE VALUE=http://kedicik.ucoz.ru/les3/tunnel.swf><PARAM NAME=PLAY VALUE=TRUE><PARAM NAME=LOOP VALUE=TRUE><PARAM NAME=QUALITY VALUE=HIGH><param name='allowscriptaccess' value='never'><EMBED SRC=http://kedicik.ucoz.ru/les3/tunnel.swf allowscriptaccess='never' WIDTH=400 HEIGHT=300 PLAY=TRUE LOOP=TRUE QUALITY=HIGH wmode=transparent></EMBED></OBJECT>
Настройка окружения
1. Создайте новый документ Flash размером 400×300.
2. Нарисуйте круг размером 30×30. Я использовал #ff8800 для цвета обводки и #ffffff для цвета заливки.
3. Конвертируйте круг в муви клип. Назовите его “MyCircle” и установите точку регистрации в центре. Сейчас вы должны увидеть подобно этому.
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;
}
7. Это все, протестируйте ваш мувик