2011-08-11 19 views
4

私は2隻の同一の船レンダリングするためにこれをやっている:スプライトがActionScript 3でビットマップを共有する必要がありますか?

[Embed(source = "ship.png")] 
public var ShipBitmap:Class; 

var ship1:Sprite = new Sprite(); 
ship1.addChild(new ShipBitmap()); 

var ship2:Sprite = new Sprite(); 
ship2.addChild(new ShipBitmap()); 

が、これは推奨される方法です、または私はどのような方法でメモリを無駄にしていますか? 2つを作成する必要はありません。ShipBitmapまた、私はちょうどコンテナのスプライトを使用することについて少し不明です。

答えて

4

あなたは、単一のBitmapDataインスタンスを共有し、貴様の文脈で、このインスタンスを使用することができます。 はここで簡単な例です:

package { 
    import flash.display.Bitmap; 

    import mx.core.BitmapAsset; 

    import flash.display.BitmapData; 
    import flash.display.Sprite; 

    public class Main extends Sprite { 
     [Embed(source="test.jpeg", mimeType="image/jpeg")] 
     private var TestImage : Class; 

     public function Main() { 
      //extract the BitmapData from the BitmapAsset 
      var testImageBitmapData : BitmapData = BitmapAsset(new TestImage()).bitmapData; 

      var sprite1 : Sprite = new Sprite(); 
      sprite1.x = 100; 
      sprite1.y = 100; 
      //display the BitmapData with a Bitmap container 
      sprite1.addChild(new Bitmap(testImageBitmapData)); 
      addChild(sprite1); 

      var sprite2 : Sprite = new Sprite(); 
      sprite2.x = 200; 
      sprite2.y = 200; 
      sprite2.addChild(new Bitmap(testImageBitmapData)); 
      addChild(sprite2); 

      var sprite3 : Sprite = new Sprite(); 
      sprite3.x = 300; 
      sprite3.y = 300; 
      //draw the BitmapData directly into the Sprite 
      sprite3.graphics.beginBitmapFill(testImageBitmapData,null,false,true); 
      sprite3.graphics.drawRect(0, 0, testImageBitmapData.width, testImageBitmapData.height); 
      sprite3.graphics.endFill(); 
      addChild(sprite3); 

     } 
    } 
} 
+0

良いアイデア。ありがとう! – Sara

-2

あなたは一度、あなたのオブジェクトのインスタンスを作成し、そのようにそれを参照することができます:

[Embed(source = "ship.png")] 
public var ShipBitmap:Class = new ShipBitmap(); 

var ship1:Sprite = new Sprite(); 
ship1.addChild(ShipBitmap); 
var ship2:Sprite = new Sprite(); 
ship2.addChild(ShipBitmap); 
+0

私は現在、同様のプロジェクトに取り組んでいると私は、上記の方法を使用しています。あなたが同意しない場合、いくつかの洞察を与えてもらえますか?ありがとう – OverMars

+1

あなたが提供した例はコンパイルできません(コードへのエラー)、それはおそらくあなたの答えが投票された理由です... – OXMO456

+0

フェア十分、申し訳ありませんsara :( とOXMO456 ...非常に広範な例、感謝 – OverMars

関連する問題