Should my sprites share bitmaps in ActionScript 3?

I do this to display two identical ships:

[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() ); 

Is this the recommended way, or am I losing my memory altogether? No need to create two ShipBitmap s. Also, I'm a little unsure of using a container-only sprite.

+4
source share
2 answers

You can share one instance of BitmapData and use this instance in different contexts. Here is a quick example:

 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); } } } 
+4
source

You can instantiate your object once and refer to it as follows:

 [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 ); 
-2
source

All Articles