Должны ли мои спрайты иметь общие растровые изображения в ActionScript 3? - PullRequest
4 голосов
/ 11 августа 2011

Я делаю это для визуализации двух одинаковых кораблей:

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

Это рекомендуемый способ, или я трачу память каким-либо образом?Нет необходимости создавать два ShipBitmap с.Кроме того, я немного не уверен в использовании спрайта только для контейнера.

Ответы [ 2 ]

4 голосов
/ 11 августа 2011

Вы можете поделиться одним экземпляром 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 голосов
/ 11 августа 2011

Вы можете создать экземпляр вашего объекта один раз и ссылаться на него так:

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