2011-06-28 10 views
0

私はロケット打ち動画のトゥイーンを形作ろうとしています。私はそれが離陸する前に "スカッシュ"し、それから持ち上げるときに "ストレッチ"したい。下部(Y)位置を維持しながら形状トゥイーン/変形?

これをタイムライン上で変形ツールでトウィーンすると、ロケットを「スカッシュ」させることができ、ロケットの基盤は「地面」にとどまります。これは私が欲しいものです。しかし、私が行かない理由から、タイムライン上ではなく、AS3でこれを行う必要があります。しかし、「高さ」のトゥイーンを使用すると、ムービークリップの高さは変わりますが、下端が縮小/伸びます(上端がロックされます)。

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

代わりに変換マトリックスを使用する必要がありますか?変換マトリックスを使用している場合、それをトゥイーンできますか? (私は変換matriciesと非常に多くの経験を持っていない)

ここで私はストレッチのために使用していトゥイーンです:

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

答えて

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; 
} 
+0

私は既存のムービークリップを使用しているので、登録ポイントを変更することはできません。これは簡単な回避策でした。ただし、ムービークリップ内の要素が0,0まで並んでいない場合は、ボトムオフセットがわずかにオフになります。この質問に対する私自身の答えをチェックして、別のアプローチ - オフセットですべての子要素を動的に再配置してから、ムービクリップをオフセットによって再配置します。これは、子コンポーネントとレイヤーを扱うことなく、登録ポイントを変更するのと同じ効果があります。 – user359519

0

問題は、おそらくあなたが内部のグラフィックを固定されているところでありますFLAのムービークリップオブジェクトグラフィックスを調整した場合、たとえばムービークリップ内のgraphic.y = -graphic.heightなど、Y軸のスケーリングでは、上からではなく下からグラフィックをプッシュするだけです。

+0

を私はライブラリに新しいムービークリップを作成した場合、これは働いてきたと思います。私はここで見つけるチュートリアルに基づいて

。しかし、ムービークリップは既に作成されているので、コードなしで登録ポイントを変更することはできません。だから私は他の答えに投票した。 – user359519

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; 
    } 
} 
関連する問題