![]() |
|
||||||||||
|
|||||
|
Регистрация: Aug 2006
Сообщений: 40
|
Подскажите, пожалуйста, никак разобраться не могу.
Есть галерея из приаттаченных мувиков. Мувики разной ширины. Нужно чтобы мувики выстраивались друг за другом. Этот код на форуме выкладывал D12, но там все приаттаченные мувики определенного размера. Я решил его подправить. Вот код. posX = _root.mc._x;
posY = _root.mc._height/2;
posMask = 0;
var L:Number = 5;
//длина зазора между кнопками
var N:Number = 6;
//количество кнопок
var G:Number = 2;
//скорость для кнопок
var T:Number = 1;
//скорость увеличения и уменьшения для кнопок
var Q:Number = G;
//
for (var i:Number = 1; i<=N; i++) {
this.attachMovie("phil"+i, "phil"+i, i);
W = this["phil"+i];
H = W._width;
this["phil"+i]._x = (posMask-(H/2))+i*(H+L);
this["phil"+i]._y = posY;
this["phil"+i].e = i;
this["phil"+i].o = 0;
/////////////////
this["phil"+i].onEnterFrame = function() {
this._x -= Q;
this.onRollOver = function() {
trace(H);
}
if (this._x<posMask-(H+L)) {
this._x = this._x+((this._width+L)*N);
}
//
if (this.o==1 && this._width<H+(L*2)) {
this._width = this._height += T;
}
if (this.o==0 && this._width>H) {
this._width = this._height -= T;
}
}
}
![]() |
|
|||||
|
Регистрация: May 2008
Сообщений: 476
|
Для начала пересмотрите "странноватые" записи:
Вот это мне тоже непонятно: Последний раз редактировалось Alex_beginner; 25.05.2008 в 18:01. |
|
|||||
|
Регистрация: Aug 2006
Сообщений: 40
|
Мне нужно обратиться к аттаченному мувику и узнать его длину.
Мувики разной длины (горизонтальные 600 px и вертикальные 300 px) не помогает. пишет длину последнего загруженного мувика |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Ну это какая i того длину и пишет. А вы пробовали в одном цикле приаттачить, а в другом пробежаться и всех расставить? Имхо, так проще и яснее, когда функция делает одно действие.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: May 2008
Сообщений: 476
|
Рекомендую вынести onEnterFrame из цикла и организовать основные действия на основной временной шкале, т.e сделать чтото вроде:
|
|
|||||
|
Регистрация: Aug 2006
Сообщений: 40
|
вроде с порядком разобрался
теперь косяк с формулой, с которой мувики выстраиваются друг за другом: posX = _root.mc._x;
posY = _root.mc._height/2;
posMask = 0;
var L:Number = 5;
//длина зазора между кнопками
var N:Number = 6;
//количество кнопок
var G:Number = 20;
//скорость для кнопок
var Q:Number = G;
//
for (var i:Number = 1; i<=N; i++) {
this.attachMovie("phil"+i, "phil"+i, i);
H = this["phil"+i]._width;
this["phil"+i]._x = (posMask-(H/2))+i*(H+L);
this["phil"+i]._y = posY;
trace(this["phil"+i]._x);
/////////////////
this["phil"+i].onEnterFrame = function() {
this._x -= Q;
if (this._x<posMask-(H+L)) {
this._x = this._x+((this._width+L)*N);
}
}
}
Те, которые 290 пикселей, выстраиваются нормально друг за другом, последний 6й уезжает ваще куда то далеко .. Если мы подставим в ту формулу 290, получается все нормально x = 150, 445, 740, 1035, 1330... А когда подставляешь 569, получается аж x = 3159.5 ![]() |
|
|||||
|
Регистрация: May 2008
Сообщений: 476
|
Если подождете до завтра. Я Вам готовый код представлю.
|
|
|||||
|
Регистрация: Aug 2006
Сообщений: 40
|
Большое спасибо.
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Почему бы не завести переменную и наращивать ее на ширину приаттаченного мувика в каждой итерации.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: May 2008
Сообщений: 476
|
Mayday!Здраствуйте!
Если я правильно понял Вашу идею, то должно получиться вот такое (100 % рабочий код - тестировал в Флеше): var posX:Number = 200;//конечная позиция клипов - X
var posY:Number = 200;//конечная позиция клипов - Y
var posMask:Number = 0;//ваще незнаю
var finalWidth:Number = 30; //ширина мувиков, когда они выстроятся в одну колоду
var finalHeight:Number = 30; //высота мувиков, когда они выстроятся в одну колоду
var numSteps:Number = 50;//количество шагов за которое клипы достигнут конечного состояния
var counterSteps:Number = 0;//счетчик шагов
var mc_name:String = null;//промежуточная переменная
var mc_wd:Number = null;//ширина клипа
var half_wd:Number = null;//полуширина клипа
var prev_mc_rx:Number = 0;//крайняя правая координата клипа
var varStepX:Number = null;//промежуточная переменная - шаг по X
var L:Number = 6;
//длина зазора между кнопками
var N:Number = 4;
//количество кнопок
var G:Number = 4;
//скорость для кнопок
var T:Number = 1;
//скорость увеличения и уменьшения для кнопок
var Q:Number = G;
for (var i:Number = 1; i<=N; i++)
{
mc_name = "phil"+i; //микрооптимизация
this.attachMovie(mc_name,mc_name,i);
mc_wd =this[mc_name]._width; //микрооптимизация
half_wd = mc_wd/2; //микрооптимизация
this[mc_name]._x = prev_mc_rx+half_wd+L;//для точки регистрации в центре клипа
this[mc_name]._y = posY;
prev_mc_rx = this[mc_name]._x+half_wd;//для точки регистрации в центре клипа
this[mc_name].stepX = (posX-this[mc_name]._x)/numSteps;//шаг по X
this[mc_name].stepW = (finalWidth-mc_wd)/numSteps;//шаг по ширине клипа
this[mc_name].stepH = (finalHeight-this[mc_name]._height)/numSteps;//шаг по высоте клипа
}
this.onEnterFrame = function():Void
{
for (var i:Number = 1; i<=N; i++)
{
mc_name = "phil"+i; //микрооптимизация
varStepX = this[mc_name].stepX;
if (varStepX!=0)
{
this[mc_name]._x +=varStepX;//движемся по X
this[mc_name]._width+=this[mc_name].stepW;//увеличиваем/уменьшаем длину клипа
this[mc_name]._height+=this[mc_name].stepH;//увеличиваем/уменьшаем высоту клипа
}
}
if (counterSteps==numSteps) delete this.onEnterFrame;
counterSteps+=1;
}
Все вышеприведенные методы несколько несовершенны. Более лаконичный метод это использование класса Tween и трансформационной анимации флеша. Последний раз редактировалось Alex_beginner; 26.05.2008 в 15:00. |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:10. |
|
|
« Предыдущая тема | Следующая тема » |
|
|