Flixelでプログラムされているプラットフォーマーの過程で、たくさんやりたいと思っていたタスクを処理するための基本的なクラスを作成しました。このクラスは純粋なAS3で記述されており、埋め込みファイルをさまざまなデータ型に変換するための継続的な機能を保持することを目的としており、そのためには複数の手順が必要でした。
package net.darkglass.conversion
{
import flash.display.BitmapData;
import flash.display.DisplayObject;
public class Embedded
{
/**
* Returns a BitmapData loaded with the given embedded image class.
*
* This function does no real error checking.
*
* TODO: Establish basic error checking for function.
*
* @param image An embedded image class object
* @return BitmapData loaded with contents of Image
*/
public function imageToBitmapData(image:Class):BitmapData
{
// instantiate image as a DisplayObject
var imageDisplayObject:DisplayObject = new image();
// create empty BitmapData to use, using image's size for the BitmapData's size
var imageBitmapData:BitmapData = new BitmapData(imageDisplayObject.width, imageDisplayObject.height);
// load imageDisplayObject's contents into imageBitmapData
imageBitmapData.draw(imageDisplayObject);
// that should be all we need. Return imageBitmapData
return imageBitmapData;
}
}
}
次に、コードでこのオブジェクトをインスタンス化し、2つのわずかに異なる方法で、ロードされたを生成するために使用しようとしましたBitmapData
。
最初のものは失敗しました(空のBitmapDataを正常に作成したようです):
// ...
/* Our source image for the test map */
[Embed(source="../asset/graphic/debug/testmap.png")]
public var testmap:Class;
// ...
public var converter:Embedded;
// ...
// test level!
var testmapBD:BitmapData = converter.imageToBitmapData(testmap);
2つ目は、1つ目と同じ結果を示しています。
// ...
// Only the last few lines change...
// ...
// test level!
var testmapBD:BitmapData = new BitmapData(0, 0);
testmapBD = converter.imageToBitmapData(testmap);
// ...
AS3はインスタンス化されたオブジェクトを返さないようですか?または、どうやら、何か使用できるものはありますか?1回限りとして、私は先に進み、BitmapDataのディメンションを2番目のケースから正しいサイズに変更しようとしましたが、役に立ちませんでした。
// ...
// Only the last few lines change...
// ...
// test level!
var testmapBD:BitmapData = new BitmapData(40, 30);
testmapBD = converter.imageToBitmapData(testmap);
// ...
こことその周辺を少し検索すると、AS3ではプリミティブが値渡しであり、複合型が参照渡しであるという印象を受けました...そして(安全ではありませんが)それBitmapData
は複雑であると思います-タイプ。
これを行う方法はありますか?私はここで何を誤解しているのですか?