Флеш каталог. Пролемы со скоростью и тректорией движения.
Здравствуйте.
Есть задача сделать нечто на подобии http://ferrero.ru/, только траектория представляет собой параболу.
Начал писать, сделал практически всё, но у меня вот никак не выходит пара моментов.
1) Я так и не понял, как с помощью AS задать объектам двигаться не по оси X, а по параболе.
2) То, что есть работает не совсем корректно, почему-то процесс увеличения и уменьшения объектов происходит и за пределами рабочей области.
3) Не пойму как сделать так, чтобы объекты пропадали и появлялись позже/раньше областей по бокам, где мы меняем направление движения, иначе происходит наслоение и вообще это не совсем верно.
Прошу совета или указания на ошибку, хотя бы по одному пункту. Заранее, спасибо! Код ниже, если нужен fla файл могу кинуть.
Код AS1/AS2:
//ширина кнопки
var _buttonWidth:Number = 150;
//минимальная ширина кнопки
var _minbuttonWidth:Number = 70;
//длинна зазора между кнопками
var _backlashButton:Number = 35;
//направление движения
var _vector:Number = 1;
//количество кнопак
var _buttonNumber:Number = 7;
//значение по оси X для кнопак
var _minX:Number = 0;
var _maxX:Number = Stage.width;
//значение по оси Y для кнопак
var _positionY:Number = 90;
//скорость для кнопак
var _speedX:Number = 2;
//ссылки для кнопак
var _addressesSites:Array = ["http://www.adobe.com", "http://www.google.com", "http://www.flash-mx.ru", "http://www.rambler.ru", "http://www.mail.ru", "http://www.membrana.ru", "http://www.3dnews.ru", "http://www.3dnews.ru"];
//скорость увеличения и уменьшения для кнопак
var _scaleSpeed:Number = 0.5;
//степень размытости, меньше больше
var _blurX:Number = 100;
//блюр эффект для кнопак если равен "true" то активен, "false" то не активен
var _activationBlur:Boolean = true;
//рабочие величины
var _workWidth:Number = _buttonWidth+_backlashButton;
var _workCoordinateX:Number = _workWidth*_buttonNumber;
//
//
//активируем необходимые фильтры флеша
import flash.filters.*;
import flash.display.*;
//
//наводки спараво и слево
right.onRollOver = function() {
_root._vector = 1;
};
left.onRollOver = function() {
_root._vector = 0;
};
//
//цикл расстановки кнопак
for (var i:Number = 0; i<_buttonNumber; i++) {
var iconButton:MovieClip = attachMovie("Icon"+i, "IconButton"+i, i);
iconButton._x = (_minX-(_buttonWidth/2))+i*_workWidth;
iconButton._y = _positionY;
//ключевая переменная которая равна числовому номеру нашей кнопки, по её номеру задаём номер ссылки из массива _addressesSites
iconButton.e = i;
//переменная которая участвует в функциях onRollOut и onRollOver с её помщью(активна она или нет) в onEnterFrame задается действие на уменьшение или увеличение кнопки
iconButton.o = false;
//
//
//кнопочные событья
iconButton.onRollOut = function() {
this.o = false;
_speedX = 2;
};
iconButton.onRollOver = function() {
this.o = true;
_speedX = 0;
};
iconButton.onPress = function() {
getURL(_addressesSites[this.e], "_blank");
};
//
//
//этика поведения кнопки
iconButton.onEnterFrame = function() {
if (_vector==1) {
this.z = Math.floor((Stage.width/2)/400*_speedX); this._x += this.z; }
if (_vector==0) {
this.z = Math.floor((Stage.width/2)/400*_speedX); this._x -= this.z; }
//новые позиции кнопак при смещении за рабочий экран
if (this._x<_minX-(_workWidth-this.z)) {
this._x = this._x+_workCoordinateX;
}
if (this._x>_maxX+(_workWidth+this.z)) {
this._x = this._x-_workCoordinateX;
}
//блюр эффект
if (_activationBlur == true) {
if (this._x<Stage.width/2) {
var filter:BlurFilter = new BlurFilter(Math.floor(((_maxX/2)-this._x)/_blurX), 0, 3);
}
if (this._x>Stage.width/2) {
var filter:BlurFilter = new BlurFilter(Math.floor(((_maxX/2)-this._x)/_blurX)*-1, 0, 3);
}
var filterArray:Array = new Array();
filterArray.push(filter);
this.filters = filterArray;
}
if (_speedX>0) {
if (this._x<Stage.width/2 && _vector==0 && this._width>_minbuttonWidth) {
this._width = this._height -= _scaleSpeed;
}
if (this._x<Stage.width/2 && _vector==1 && this._width<_buttonWidth) {
this._width = this._height += _scaleSpeed;
}
if (this._x>Stage.width/2 && _vector==1 && this._width>_minbuttonWidth) {
this._width = this._height -= _scaleSpeed;
}
if (this._x>Stage.width/2 && _vector==0 && this._width<_buttonWidth) {
this._width = this._height += _scaleSpeed;
}
}
};
}
Добавлено через 28 часов 39 минут
вопрос 2 и 3 решил сам.
Главный вопрос который передо мной стоит это: Как заставить мои мувики двигаться по параболической траектории?
То есть логически я понимаю что нужно написать уравнение параболы, это не так сложно.
А вот как заставить их по ней двигаться не пойму.
Заранее, спасибо.
|