2012-05-03 4 views
3

私は複製のために利用できる形を作ろうとしています。ここで私がやろうとし、そしてどこ私はこだわっているんだ何を、私が何をやったかの説明です:AS3 Shapeオブジェクトを複製できますか?

  • のFlash IDE(絵筆)に手動で図形を描きました。
  • シェイプを含む新しいムービークリップを作成しました。クラスとしてエクスポートします。
  • クラスをインスタンス化します(var mc:MovieClip = new shapeMovieClip())。
  • は、私が欲しいMCにおける形状(のvar myShapeへの参照を追加します。形状= mc.getChildAt(0)形状など;
  • これは完璧に動作し、私は今、私の形状を有しているが、私はどのように複製することができますその親MovieClipクラスをインスタンス化せず? - それは可能である私は、新しい形状を作成し、無駄をcopyFrom()グラフィックスメソッドを使用して試してみた

、私は彼らが「ときに、この方法は、単にコピーが呼び出しを描くと信じて参照されているグラフィックス上に作られたもので、代わりにすでに描画されている図形の参照があります。

今はmovieclipをスプライトとして拡張し、インスタンス化し、親からシェイプをプルしてリファレンスを保存してから、スプライトをnullにします。この方法でShapesを複製するためのより優れた、より軽量な戦略を知っている人はいますか?

+0

を探しているのかわからない場合は、この小さな癖があなたの髪を抜くあなたを残すことができます知っているが、クローンに他の方法がありませんIDEからシェイプを作成します。 – turbosqel

+0

AFAIKできません(ide製シェイプはコードシェイプとは別にコンパイルされるため、パスデータは取得できません)。なぜあなたはより多くのshapeMovieClipsを作成できませんか? – Cay

+0

@Cayそれは私が使用している現在の解決策ですが、私は、使用されない複数のスプライトをインスタンス化するよりも速い方法があることを期待していました。 –

答えて

1

基本的には、図形を拡大/縮小する必要があるかどうかによって異なります。そうでない場合は、固定サイズのシェイプのビットマップ表現で作業することができます。シェイプをBitmapData(これはrasterisation)に配置し、ビットマップオブジェクトをインスタンス化する際のパフォーマンスが向上します(他のコメント作成者でる)。あなたがクリップをスケールする必要があります場合は、ビットマップを使用してピクセレーションを取得します

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をスケールダウンすると、回転するときもある程度助けになりますが、スケールアップする必要がある場合は、おそらく何らかの種類のmip-mappingを使用する必要があります。これは、基本的に、異なるスケールレベルでシェイプのビットマップをいくつか作成し、現在のスケールに応じてスワップします。これをコード化するのはいくらか複雑です(ヘルパーの親を使ってスケールを調整することができます)が、多くのシェイプシンボル(スプライトの親の有無にかかわらず)よりも優れた性能を発揮します。

var shapeonstage:Shape = shapeMadeInIDE; 
var g:Vector.<IGraphicsData> = shapeonstage.graphics.readGraphicsData(); 

var shapecopy:Shape = new Shape(); 
shapecopy.graphics.drawGraphicsData(g) 

ブーム:

1

これは非常に古いですが、それはまだアップハイグーグルでてくるが、私はちょうど真の形状複製方法を共有したいと思いました。できます。私はこれまで何度も何度も何度も手伝ってくれたので、これを共有しなければならなかった。

UPDATE:

私はあなたが複製するおよびSWF内にあるシェイプへの参照を格納するため、この方法を使用したいと思う理由を追加したいいくつかの明確化があります。

ステージ上またはムービークリップ内のShapeオブジェクトを対象とする場合、Flashレンダリングエンジンは何か変なことを行います。これはShapeオブジェクトをRECYCLEして新しいグラフィックスをレンダリングし、Shape参照ポイントを完全に異なるレンダリングにします。例えば

  • ムービークリップとのFLAを作成します。
  • ムービークリップの内側に10フレームを作成します。各フレームに
  • 、あなたのコードでは、異なる形状
  • を描き、形状を参照する(フレーム1の形状)
  • があなたのシェイプを描画し、検証します(ビットマップに描画し、次にステージにBMPを置きます)
  • は今5つのフレーム
  • 再び

二回あなたがあなたの形の参照を再割り当てすることなく、あなたの図形を描くには、SOMETIMES完全に異なる形状を与えるであろう描き、あなたの形状を確認するためにフラッシュエンジンプレイをしてみましょう。

ちょうどあなたがあなたがあなたがBitmapDataにそれを描く試すことができます:)

関連する問題