1

AS3アニメーションにMCがあり、その高さを下から上に上げたいのですが、これは、登録ポイントがMCの下部で、幅の中心(水平方向の中心)である必要があることを意味します。

どうすればこれを行うことができますか?

ありがとうございました。

4

2 に答える 2

1

古い登録ポイントの問題に対する私の推奨事項、いくつか...

  • シンボルを編集でき、処理するものが少ない場合は、正直なところ、手動​​で行ってください。
  • 処理するものがかなりあるが、サルを雇ってシンボルを再配置できる場合は、JSFL スクリプトを調べて、選択したライブラリ シンボルをバッチ処理することを検討してください。
  • AS3 を使用して動的に再配置する必要がある場合...

    • そして、オブジェクトを別のコンテナに入れても構いません。それを新しいスプライト オブジェクトの下部の中心が (0,0) の位置と交わる場所に入れれば、アセットの代わりにスプライト コンテナをスケーリングできます。
    • また、アセットの BitmapData スナップショットのベクター品質を犠牲にしてもかまいません。アセットのスナップショットを作成し (「完全に開いた/引き伸ばされたように見えるため)」、ビットマップをトリミングします (次の組み合わせを使用して:

    var rect:Rectangle = bitmapData.getColorBoundsRect(0xff000000, 0, false); yourCroppedBitmapData.copyPixels( bitmapData, rect, ... );

    ...信頼できる左上隅のレジストレーション ポイントを取得したら、このビットマップをスプライト コンテナーに配置して (上記のように) 上に拡大する計算を行うことができます。

または...サルを雇うのも楽しいでしょう:P

しかし、ええ、これらはシンボルを再配置できる代替方法の一部です。

于 2010-10-14T15:48:30.777 に答える
1

ああ、古い登録ポイントの問題。:)

Flash オーサリングで簡単にできるように、表示オブジェクトの登録ポイントを変更できる小さなカスタム クラスを見たことがあります。気になる方はググってみてください。

ただし、解決策はかなり簡単です。表示オブジェクトの登録ポイントは、オブジェクトが表示リストに追加される方法に基づいて割り当てられます。表示オブジェクトを表示リストに追加するときにそれを考慮に入れる必要があります。次に、登録ポイントを変更するための簡単な計算を少し設定します。

//Set up rect's width and height
var rectWidth:uint = 200;
var rectHeight:uint = 100;

//Assign registration point (TL, TC, TR, CL, C, CR, BL, BC, BR = top, center, bottom, left, right)
var registration:String = "C"

//Assign rect's X and Y properties
var rectX:int;
var rectY:int;

switch (registration)
       {
       case "TL": rectX = 0;
                  rectY = 0;
                  break;

       case "TC": rectX = -rectWidth / 2;
                  rectY = 0;
                  break;

       case "TR": rectX = -rectWidth;
                  rectY = 0;
                  break;

       case "CL": rectX = 0;
                  rectY = -rectHeight / 2;
                  break;

       case "C":  rectX = -rectWidth / 2;
                  rectY = -rectHeight / 2;
                  break;

       case "CR": rectX = -rectWidth;
                  rectY = -rectHeight / 2;
                  break;

       case "BL": rectX = 0;
                  rectY = -rectHeight;
                  break;

       case "BC": rectX = -rectWidth / 2;
                  rectY = -rectHeight;
                  break;

       case "BR": rectX = -rectWidth;
                  rectY = -rectHeight;
       }


//Draw the rect
var rect:Sprite = new Sprite();
rect.graphics.beginFill(0xFF0000);
rect.graphics.drawRect(rectX, rectY, rectWidth, rectHeight);
rect.graphics.endFill();
于 2010-10-13T16:22:07.507 に答える