Формировать анимацию движения / трансформацию, сохраняя нижнее (Y) положение? - PullRequest
0 голосов
/ 28 июня 2011

Я пытаюсь создать анимационный ролик о взрывающейся ракете.Я хочу, чтобы он "раздавил" перед стартом, а затем "растянулся", когда он оторвался.

Когда я изменяю это на временной шкале с помощью инструмента трансформации, я могу «раздавить» ракету, и основание ракеты остается на «земле».Это то, что я хочу.Однако по причинам, в которые я не буду вдаваться, мне нужно сделать это в AS3, а не на временной шкале.Когда я использую анимацию «высота», высота видеоклипа изменяется, но она уменьшается / растягивается внизу (заблокирована сверху).

Можно ли делать то, что я хочу, с классом анимации?Нужно ли использовать что-то кроме «высоты»?

Должен ли я вместо этого использовать матрицу преобразования?Если я использую матрицу преобразования, могу ли я ее поменять?(У меня не очень большой опыт работы с матрицами преобразования.)

Вот анимация, которую я использую для растяжки:

var tweenPlayer1:Tween = new Tween(mc_player, "height", Strong.easeOut, mc_player.height, mc_player.height+100, 2, true);

Ответы [ 3 ]

1 голос
/ 28 июня 2011

Вероятно, есть лучший способ справиться со стартовой и высотой, но это сработает для вас

import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;

var startingYandHeight:Number = mc_player.y + mc_player.height;

var myTween:Tween = new Tween(mc_player, "height", Strong.easeOut, mc_player.height, mc_player.height + 100, 2, true);
myTween.addEventListener( TweenEvent.MOTION_CHANGE, onChange);

function onChange( e:TweenEvent ):void{
    mc_player.y = startingYandHeight - mc_player.height;
}
0 голосов
/ 01 июля 2011

Вот другой подход, как я описал выше.Это имеет тот же эффект, что и изменение точки регистрации без головной боли при работе с дочерними компонентами и слоями.

На основе учебника, который я нашел здесь: http://theflashconnection.com/content/how-to-change-registration-point-as3#viewSource

var heightChange:int = 200;

setRegPoint(mc_player, 0, mc_player.height);

var myTween:Tween = new Tween(mc_player,"height",Strong.easeOut,mc_player.height,mc_player.height - heightChange,2,true);

function setRegPoint(obj:DisplayObjectContainer, newX:Number, newY:Number):void {
    //get the bounds of the object and the location 
    //of the current registration point in relation
    //to the upper left corner of the graphical content
    //note: this is a PSEUDO currentRegX and currentRegY, as the 
    //registration point of a display object is ALWAYS (0, 0):
    var bounds:Rectangle = obj.getBounds(obj.parent);
    var currentRegX:Number = obj.x - bounds.left;
    var currentRegY:Number = obj.y - bounds.top;

    var xOffset:Number = newX - currentRegX;
    var yOffset:Number = newY - currentRegY;
    //shift the object to its new location--
    //this will put it back in the same position
    //where it started (that is, VISUALLY anyway):
    obj.x += xOffset;
    obj.y += yOffset;

    //shift all the children the same amount,
    //but in the opposite direction
    for(var i:int = 0; i < obj.numChildren; i++) {
        obj.getChildAt(i).x -= xOffset;
        obj.getChildAt(i).y -= yOffset;
    }
}
0 голосов
/ 28 июня 2011

Проблема, вероятно, связана с тем, где у вас есть привязанный рисунок внутри вашего объекта мувиклипа в вашем FLA.Если вы отрегулировали изображение так, чтобы оно было выровнено по нижнему краю, например, graphic.y = -graphic.height внутри фрагмента ролика, масштабирование по оси Y должно просто толкать изображение снизу, а не сверху.

...