Поворот ширины объекта без перемещения объекта в Actionscript 3 - PullRequest
1 голос
/ 24 февраля 2012

Я пытаюсь применить анимацию для свойства width объекта MovieClip, но каждый раз, когда он также меняет ширину и позицию, я этого не хочу. Я хочу изменить ширину в одну сторону без изменения x и y объекта.

Я попробовал оба из них, и они дали тот же результат.

var c:Tween = new Tween(left, "scaleX", Strong.easeOut, 1, 1.5,20,true);
var c:Tween = new Tween(left, "width", Strong.easeOut, 20, 200,20,true);

Я думаю, что это применяет преобразование в соответствии с центром клипа. но я не знаю, как это можно изменить.

любая помощь?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Ваша проблема в том, что вы неправильно рисуете свой видеоклип, и его ограничивающая рамка не начинается с x, y, 0;что ты можешь сделать1. исправить клип, чтобы графика была в 0,0 позиции.или же2. поместите свой «левый» объект внутри другого объекта в положение 0,0 и затем по шкале.или же3. Вы можете пропорционально перемещать координату X также во время анимации изменения размера.

var c:Tween = new Tween(left, "width", Strong.easeOut, 20, 200,20,true);
var c1:Tween = new Tween(left, "x", Strong.easeOut, left.x, left.x+delta*200/(2*20),20,true);

где delta - это смещение вашего изображения внутри фрагмента ролика.

0 голосов
/ 24 февраля 2012

Во-первых, уклоняйтесь от движка Tween по умолчанию.Для этого есть более удачные альтернативы (это основная причина, по умолчанию движок Tween не получал никакого внимания со стороны разработчиков платформы).Некоторые возможности могут быть найдены здесь или через Интернет.

Да, тот факт, что объект меняет положение, когда изменяется его ширина, показывает, что его точка регистрации не находится на координате0 по отношению к этому объекту.Решения:

  1. Если у вас есть такая возможность, измените точку регистрации объекта.Может быть, с помощью Flash IDE или программно сложенных компонентов, например, точка регулировки будет равна 0 относительно объекта.

  2. Сдвигайте его вправо на половину значения раскрытия при каждой итерации.

В этом небольшом фрагменте объясняется, что перевести его на подростков должно быть легко:

this.addEventListener(Event.ENTER_FRAME, _loop);
function _loop(event:Event):void
{
    derp.width += 10; // every iteration makes width 10 px bigger
    derp.x += 5; // 10 / 2 = 5; might want to calculate this dynamically.
}

Имейте в виду, это работает только в том случае, если точка регистрации находится намертвая точка (по оси х) на объекте.

...