0

タイムラインで手動でスケーリングしたムービー クリップがあります。

私は今、アクション スクリプトで WIDTH と HEIGHT を取得しようとしているので、別の movieClip をロードして同じサイズにすることができます。

ただし、次のコードを実行すると、スケールが WIDTH で HEIGHT が元のサイズを表示し、スケーリングされたサイズの座標が表示されないため、正しく配置できません。そのため、新しいクリップをその中に配置すると、再スケーリングされたクリップと同じ WIDTH と HEIGHT にすることはできません。

ScaledMC.addChild(myMC);
myMC.x = - ScaledMC.width /2; //Because the MC registration is in the center

回避策は、クリップの境界の x 位置と y 位置、およびそれらがステージ上のどこにあるかを検出するコードである可能性があります。

御時間ありがとうございます。

更新: 4-25-12

FLAを含め、私がやろうとしていることの完全なコードを投稿しています。女の子をクリックすると、別のムービー クリップに読み込む必要があります。ただし、ムービー クリップはスケーリングされているため、負荷がかかると位置が突然変化します。彼女が動かず、同じ場所にとどまっているように見せる必要があります。

import flash.geom.Rectangle;

var Girlx = Girl.x;
var Girly = Girl.y;

var b:Rectangle;
b = Room.ChalkBoard.getBounds(this);


trace(b);


Room.ChalkBoard.addEventListener(MouseEvent.MOUSE_DOWN, fl_ClickToDrag);

function fl_ClickToDrag(event:MouseEvent):void
{
    Room.ChalkBoard.startDrag();
}

stage.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop);

function fl_ReleaseToDrop(event:MouseEvent):void
{
    Room.ChalkBoard.stopDrag();
    b = Room.ChalkBoard.getBounds(this);
}



Girl.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler);

function fl_MouseClickHandler(event:MouseEvent):void
{
    //Room.ChalkBoard.scaleX = 1;
   // Room.ChalkBoard.scaleY = 1;
    Room.ChalkBoard.addChild(Girl);


    // I NEED TO KNOW HOW TO SCALE GIRL BACK TO SAME SIZE
    // EXAMPLE:

Girl.scaleY = 1 + Room.ChalkBoard.scaleY;

Girl.scaleX = 1 + Room.ChalkBoard.scaleX;
Girl.x = Girlx - b.x; /// This formula works if Room is at scaleX is 1;
Girl.y = Girly - b.y;  /// This formula works if Room is at scaleY is 1;


}

FLA はこちら: http://www.EdVizenor.com/Girl.fla

4

2 に答える 2

1

問題がムービークリップをスケーリングして元の寸法を使用したい場合 (これがあなたの言っていることだと思います)、次のようなことを試すことができます:

ScaledMC.addChild(myMC); 
myMC.x = - (ScaledMC.width/ScaledMC.scaleX) /2; 

ムービークリップ オブジェクト自体のスケーリングの係数を追加したことに注意してください。

于 2012-04-21T01:45:38.617 に答える
1

IDE でスケーリングしたオブジェクトを表す変換にアクセスして、Matrixどれだけスケーリングしたかを調べることができます。Matrix注目したいの主要なプロパティはa、x スケールとdy スケールです。

デモ:

var matrix:Matrix = ScaledMC.transform.matrix;
trace(matrix.a, matrix.d);

その後、値を使用して、追加のムービークリップをスケーリングしたり、必要なことを行うことができます。

ボーナス: 機能があります:

function getScale(target:DisplayObject):Object
{
    var mtx:Matrix = target.transform.matrix;

    return {
        scaleX: mtx.a,
        scaleY: mtx.d
    }
}


// Get scaleX of ScaledMC.
trace(getScale(ScaledMC).scaleX);
于 2012-04-26T00:19:46.457 に答える