3

図形を複製できるようにしようとしています。私がやったこと、やろうとしていること、行き詰まっている場所の説明は次のとおりです。

  • Flash IDE (ペイントブラシ) で手動で図形を描きました。
  • 形状を含む新しいムービークリップを作成しました。クラスとしてエクスポートします。
  • クラスをインスタンス化します (var mc:MovieClip = new shapeMovieClip())。
  • 必要なmcの形状への参照を追加します(var myShape:Shape = mc.getChildAt(0) as Shape;
  • これは完璧に機能し、シェイプが完成しましたが、親の MovieClip クラスをインスタンス化せずに複製するにはどうすればよいですか?

私は新しいシェイプを作成しようとしましたが、copyFrom() グラフィックス メソッドを無駄に使用してみました。このメソッドは、参照されたグラフィックスで作成されたときにドロー コールをコピーするだけであり、代わりに、既に使用されているシェイプの参照を持っているだけだと思います。描かれた。

現在、代わりにムービークリップをスプライトとして拡張し、インスタンス化し、親からシェイプをプルして参照を保存し、スプライトを無効にしています。この方法でシェイプを複製するための、より軽量で優れた戦略を知っている人はいますか?

4

2 に答える 2

1

基本的に、形状をスケーリングする必要があるかどうかによって異なります。そうしないと、形状の固定サイズのビットマップ表現でそれを解決することができ、形状を BitmapData に描画し (これはrasterisationと呼ばれます)、Bitmap オブジェクトをインスタンス化する (他のコメンターが指摘したように) パフォーマンスが大幅に向上します。アウト)。コードは次のようになります。

var base:Sprite = new shapeMovieClip();
var bmd:BitmapData = new BitmapData(base.width, base.height, true, 0);
bmd.draw(base);
var clip1:Bitmap = new Bitmap(bmd);
var clip2:Bitmap = new Bitmap(bmd);

クリップをスケーリングする必要がある場合は、ビットマップを使用してピクセル化します。縮小するときは Bitmap.smoothing がある程度 (回転するときも) 役立ちますが、拡大する必要がある場合は、おそらく何らかのmim-mappingを使用する必要があります。これは基本的に、異なるスケール レベルでシェイプのビットマップをいくつか作成し、現在のスケールに応じてそれらを交換します。これをコーディングすると多少複雑になりますが (ヘルパーの親を使用してスケールを調整すると役立つ場合があります)、多くのシェイプ シンボルを使用するより (スプライトの親の有無にかかわらず) 確実にパフォーマンスが向上します。

于 2012-05-04T08:59:52.580 に答える