0

ロケットが飛び立つムービー クリップのトゥイーンを作成しようとしています。リフトオフする前に「押しつぶし」、リフトオフすると「ストレッチ」します。

変換ツールを使用してタイムライン上でこれをトゥイーンすると、ロケットを「押しつぶす」ことができ、ロケットの基部は「地面」にとどまります。これが私が欲しいものです。ただし、ここでは説明しませんが、タイムラインではなく、AS3 でこれを行う必要があります。ただし、「高さ」トゥイーンを使用すると、ムービークリップの高さは変わりますが、下部で縮小/伸縮します(上部でロックされます)。

トゥイーンクラスでやりたいことはできますか? 「高さ」以外の何かを使用する必要がありますか?

代わりに変換行列を使用する必要がありますか? 変換マトリックスを使用する場合、トゥイーンできますか? (私は変換マトリックスの経験があまりありません。)

ストレッチに使用しているトゥイーンは次のとおりです。

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

3 に答える 3

1

おそらくstartingYandHeightを処理するより良い方法がありますが、これはうまくいくでしょう

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;
}
于 2011-06-28T19:24:06.970 に答える
0

上記で説明したように、別のアプローチがあります。これは、子コンポーネントやレイヤーを処理するという頭痛の種なしに、登録ポイントを変更するのと同じ効果があります。

ここで見つけたチュートリアルに基づく: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;
    }
}
于 2011-07-01T19:31:29.987 に答える
0

問題は、FLA のムービークリップ オブジェクト内にグラフィックが固定されている場所にある可能性があります。ムービークリップ内で graphic.y = -graphic.height のように下揃えになるようにグラフィックを調整した場合、Y 軸でスケーリングすると、グラフィックが上からではなく下から押し出されます。

于 2011-06-28T17:19:50.717 に答える