我创建了一个基本类来处理我知道在 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;
}
}
}
然后,我在我的代码中实例化了这个对象,并以两种稍微不同的方式继续尝试使用它来生成加载的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);
第二个,显示与第一个相同的结果:
// ...
// Only the last few lines change...
// ...
// test level!
var testmapBD:BitmapData = new BitmapData(0, 0);
testmapBD = converter.imageToBitmapData(testmap);
// ...
看起来 AS3 没有返回实例化的对象?或者,显然,任何可用的东西?作为一次性的,我继续尝试将 BitmapData 的尺寸从第二种情况更改为正确的大小,但无济于事:
// ...
// Only the last few lines change...
// ...
// test level!
var testmapBD:BitmapData = new BitmapData(40, 30);
testmapBD = converter.imageToBitmapData(testmap);
// ...
在这里和周围搜索了一下,我的印象是原语在 AS3 中是按值传递的,而复杂类型是按引用传递的......我会假设(但不安全)这BitmapData
是一个复杂的 -类型。
有没有办法做到这一点?我在这里误解或遗漏了什么?