タイトルは少し誤解を招くかもしれません。私のコードを見て、説明します
public static function loadTile(tileDir:String = "empty"):void
{
if(tileDir != "empty")
{
tPoint = new Point(0,0);
tRect = new Rectangle(0,0,30,30);
//load in tile sheet image
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT,tilesLoadInit);
loader.load(new URLRequest(tileDir));
}
}
private static function tilesLoadInit (e:Event):void {
tileImage = Bitmap(loader.content).bitmapData;
tileReady.dispatchEvent(new Event("TileReady"));
}
var tImage:BitmapData = new BitmapData(30,30);
tileNum = tileNumber;
tPoint.x = 0;
tPoint.y = 0;
tRect.x = 0;
tRect.y = 0;
tImage.copyPixels(tileImage,tRect,tPoint);
this.graphics.beginBitmapFill(tImage);
this.graphics.drawRect(0, 0,tWidth ,tHeight );
tImage という空の bitMapData を作成します。次に、同様に bitMapData であり、画像の写真を含む tileImage という定義済みの変数を使用します。tRect は定義済みで、その幅と高さは 30x30 です。画像の一部をコピーして、tImage に入れます。問題は、AS3 が tImage が正しくない型であるというエラーをスローすることです。
ArgumentError: Error #2015: Invalid BitmapData.
しかし、明らかにそうではありません。私の質問は、グラフィック オブジェクトが受け入れる bitMapData と bitMapData のデータ型に何か違いがあるということですか?
スプライトでタイリングしようとしています。タイルをインタラクティブにしたいので、タイルを表すために通常のビットマップを使用する代わりにスプライト オブジェクトを使用しています。なぜ私が graphics.beginBitmapFill(tImage); を使用しないのか疑問に思われるかもしれません。および graphics.drawRect(0, 0,tWidth ,tHeight ); 使用したいタイルを選択します。その理由は、drawRect() の最初と 2 番目のパラメーターが、実際のスプライトの位置を実際に変更することが判明したためです。
したがって、スプライトの x プロパティと y プロパティを x = 20、y = 20 に設定すると、drawRect(20,20) を設定します。実際には、スプライトの x 座標と y 座標に 20 ピクセルが追加されます。そして、私はその理由を知っています。もっと良い方法を知る必要があるだけです。たくさん書いてすみません、ありがとうございます!