PDA

Просмотр полной версии : Помогите разобраться с кодом


mtema
13.08.2009, 20:44
Здравствуйте!
Делаю карусель,имеется исходник шириной 980px,на котором друг за другом расположены 2 мувика с1 и с2 каждый шириной 1640px,зазор между ними около 5px,имеется кнопка которая выполняет функцию nextslide() — перемотка роликов влево. Все работает нормально,но при заходе мувиков c1 и c2 на второй круг (т.е. при появлении их справа) расстояние между ними то увеличивается то уменьшается.Пробовал привязывать величины к Stage.width не помогло. Подскажите в чем тут дело?

function nextslide() {
if (c1._x<=-1960) {
c1._x = 1960;
}
if (c2._x<=-1960) {
c2._x = 1960;
}
c1.poX = c1._x;
c2.poX = c2._x;
c1.tweenX = new mx.transitions.Tween(c1, "_x", mx.transitions.easing.Strong.easeOut, c1.poX, c1.poX-392, 0.7, true);
c2.tweenX = new mx.transitions.Tween(c2, "_x", mx.transitions.easing.Strong.easeOut, c2.poX, c2.poX-392, 0.7, true);

}

VVall
14.08.2009, 01:51
Вместо =1960 надо +=1960*2.

mtema
14.08.2009, 10:34
Так конечно стало лучше,но дело в том что при частом нажатии на кнопку перемотки слайда,все равно зазор между мувиками увеличивается с каждым разом все больше и больше,почему не ясно ((

Psycho Tiger
14.08.2009, 17:11
Ясно же почему - при частом нажатии анимация не успевает проиграться до конца, а значит
c1.poX = c1._x;
...
c1.poX-392

будет разным от времени нажатия.
[очень неуверенным голосом]
Да и монопольная постановка координат
c1._x = 1960;
плевал на неё Tween, он продолжит ставить координаты какие ему захочется.

mtema
14.08.2009, 17:26
Вот засада! Как бороться посоветуете?

Psycho Tiger
14.08.2009, 21:59
Как вариант - хранить финальную позицию где либо, и при клике ставить её, попутно убивая твин.
Код не тестировал, просто покажу принцип:

с1.finishX=c1._x;
c2.finishX=c2._x; //как никак надо определить
function nextslide() {
if (c1._x<=-1960) {
c1._x = 1960;
}
if (c2._x<=-1960) {
c2._x = 1960;
}


c1._x=c1.finishX;
c2._x=c2.finishX;
c1.poX = c1._x;
c2.poX = c2._x;
c2.finishX=c2.poX-392;
c1.finishX=c1.poX-392;
c1.tweenX.stop(); //или как там адоубовский твин убивается?
c2.tweenX.stop();

c1.tweenX = new mx.transitions.Tween(c1, "_x", mx.transitions.easing.Strong.easeOut, c1.poX, c1.finishX, 0.7, true);
c2.tweenX = new mx.transitions.Tween(c2, "_x", mx.transitions.easing.Strong.easeOut, c2.poX, c2.finishX, 0.7, true);

}