0

寸法を明示的に指定する代わりに、AS3に埋め込まれた画像の幅と高さを抽出するにはどうすればよいですか?これが私がやろうとしていることです:

    [Embed(source="../../lib/spaceship.png")]
    private var ShipImage:Class;
    private var ship_image:BitmapData;

    public function Ship(x:int, y:int, width:Number, height:Number) 
    {
        super(x, y, 36, 64);
        ship_image = new ShipImage().bitmapData;
        speed = new Point(0, 0);
    }

コンストラクター内で他のすべての前にsuperを呼び出す必要があるため、ディメンションについて事前に学習するにはどうすればよいですか?IDEとしてFlashDevelopを使用しています。

4

2 に答える 2

1

これらのプロパティは、次の方法で読み取ることができますBitmapData#rect

public function Ship(x:int, y:int, width:Number, height:Number) 
{
    // Would be better if you haven't to pass width and height
    super(x, y, 0, 0);

    // Get the bitmap data
    ship_image = new ShipImage().bitmapData;

    // Set width and height
    width  = ship_image.rect.width;
    height = ship_image.rect.height;

    // ...
}

静的な他のソリューション:

[Embed(source="../../lib/spaceship.png")]
private static const ShipImage:Class;

private static var spriteWidth:int;
private static var spriteHeight:int;

private static function calculateSpriteSize():void
{
    // Get the sprite "rectangle"
    var rect:Rectangle = new ShipImage().bitmapData.rect;

    // Set width and height
    spriteWidth  = ship_image.rect.width;
    spriteHeight = ship_image.rect.height;
}

// Call the method into the class body
// (yes you can do that!)
calculateSpriteSize();

public function Ship(x:int, y:int, width:Number, height:Number) 
{
    // Retrieve the sprite size
    super(x, y, spriteWidth, spriteHeight);

    // ...
}
于 2012-07-09T10:04:17.063 に答える
0

スケーリングで画像を抽出/サイズ変更できます。同じ縦横比または異なる縦横比で画像のサイズを変更できます。サイズを変更したくない場合は、scaleX && scaleYの値は1.0です。元のサイズの半分でサイズを変更したい場合は、両方の係数の値が0.5 です。画像を回転させたい場合は、Translation を使用します。

var matrix:Matrix = new Matrix();
matrix.scale(scalex, scaley);
matrix.translate(translatex, translatey);

var resizableImage:BitmapData = new BitmapData(size, size, true);
resizableImage.draw(data, matrix, null, null, null, true);

このサイズ変更可能なイメージはビットマップデータを返します。

これがうまくいきますように!

于 2012-07-09T13:49:06.050 に答える