Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как переопределить конечное местоположение объекта при Tween анимации (http://www.flasher.ru/forum/showthread.php?t=150435)

Universe 11.02.2011 19:19

Как переопределить конечное местоположение объекта при Tween анимации
 
Представьте ситуацию: есть набор иконок, которые надо двигать стрелочками, движение осуществляется твином. Т.е. при каждом нажатии на стрелочку создаётся новый твин и передвигает объект из текущего положения, допустим на +50 пикселов. Если дождаться завершения первого твина - всё ок - объект двигается как надо, но если начать клацать по стрелке очень быстро - начинает появляться смещение. Как сделать так, чтобы смещение не происходило? Сразу скажу что вариант с удалением лисенера не подходит т.к. анимация становится слишком "деревянной".

Bgg 11.02.2011 19:27

Не использовать стандартный твин, а TweenLite/TweenMax
И возможно стоит не добавлять 50 пикселей по нажатию, а расчитывать конечное положение контейнера с кнопками? Т.е.
Код AS3:

//не
TweenLite.to(containerBtns, 1, {x:containerBtns.x + 50});
//a
var menuPosition:Number = ...
TweenLite.to(containerBtns, 1, {x:menuPosition});


kseniya 11.02.2011 19:27

знакомая проблема..нужно рассчитывать следующее местоположение не +50. а чётко определённым. ..
тоесть при нажатии прибавлять какое нибудь ++i. и строить анимацию i*50 px

Universe 11.02.2011 20:10

спасибо. Но мне как раз не понятно, как вычислить это значение - menuPosition.
Пробовал следующим образом:
Код AS3:

function moveBox(e:MouseEvent):void
{
        shiftNum++;
        finalLocation = box.width * shiftNum;
        my_tw = new Tween(box, "x", Regular.easeOut, box.x, finalLocation, 15, false);
        trace(finalLocation);
}

Но это работает только если объект который я анимирую находится в точке 0,0. Как сделать так чтобы учитывалось его текущее положение? Т.е. чтобы он перемещался всегда на одинаковое расстояние, в независимости от того где он находится изначально?

Bgg 11.02.2011 20:19

Попробуйте так:
Код AS3:

var menuPosition:Number;
function moveBoxRight(e:MouseEvent):void
{
        menuPosition += box.width;
        TweenLite.to(containerBtns, 1, {x:menuPosition});
}


Universe 11.02.2011 20:40

Решил вопрос посредством присваивания значению menuPosition изначального положения объекта :)
Код AS3:

var menuPosition:Number = box.x;
function moveBoxRight(e:MouseEvent):void
{
        menuPosition += box.width;
        TweenLite.to(containerBtns, 1, {x:menuPosition});
}

Добавлено через 6 минут
для того чтобы адекватно учитывался промежуток, изменил код следующим образом:
Код AS3:

my_btn.addEventListener(MouseEvent.MOUSE_DOWN, moveBoxRight);
 
var spacing:Number = 8;
var firstTime:Boolean = true;
 
var menuPosition:Number = box.x + spacing;
 
function moveBoxRight(e:MouseEvent):void
{
 
        menuPosition += box.box_mc.width + spacing;
        TweenLite.to(box, 1, {x:menuPosition});
        trace(menuPosition);
        if(firstTime)
        {
                spacing*= 2;
                firstTime = false;
        }
}

Что думаете? Правильно мыслю?

Max360 21.03.2011 00:07

Столкнулся с той же самой проблемой! Кто разобрался, подскажите пожалуйста! У меня по нажатию на клавишу сдвигаются TweenLite-ом несколько UILoader-ов. Если нажимать на кнопку быстро то они начинают глючить.


Часовой пояс GMT +4, время: 05:14.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.