AS3 - TypeError:错误#1034:类型强制失败:无法将flash.display转换为flash.display.Bitmap

时间:2017-07-13 17:47:48

标签: actionscript-3 flex

我正在尝试加载swf并将其显示为位图。

到目前为止,我已经能够加载swf了:

loader.load(new URLRequest("assets/floorplan.swf"));
loader.contentLoaderInfo.addEventListener(flash.events.Event.COMPLETE, initPic);

现在加载完成后,我希望将此swf转换为Bitmap,如下所示:

public function initPic(loadEvent:flash.events.Event):void
{

    container.addEventListener(MouseEvent.CLICK, zoom);

    bitmapData = Bitmap(LoaderInfo(loadEvent.currentTarget).content).bitmapData;
    image = new Bitmap(bitmapData);
    spImage.addChild(image);
    container.addChild(spImage);

}

但是我收到错误说TypeError:错误#1034:类型强制失败:无法将flash.display转换为flash.display.Bitmap。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

仅当您加载图片文件时,

Loader.content 才是位图:JPG,PNG,GIF等。

如果您加载了SWF, Loader.content 会引用主时间轴对象,即 MovieClip 或主文档类继承 MovieClip 精灵 (不能转换为位图

然后, Loader 是加载内容的显示对象容器,因此如果只想缩放/定位/旋转加载的图形,那么操作 Loader <是个好主意/ strong>实例,因为出于安全原因,访问内容可能不可用。

另一个好主意是监听INIT事件而不是COMPLETE,因为加载所有字节时会触发COMPLETE,而当加载的内容实际就绪时会调度INIT。

loader.load(new URLRequest("assets/floorplan.swf"));
loader.contentLoaderInfo.addEventListener(Event.INIT, initPic);

public function initPic(e:Event):void
{
    container.addChild(LoaderInfo(e.currentTarget).loader);
    container.addEventListener(MouseEvent.CLICK, zoom);
}

此外,如果您的容器除了加载的内容之外没有任何图形,您可以自由地简化代码,如下所示:

container.addChild(loader);
container.addEventListener(MouseEvent.CLICK, zoom);

loader.load(new URLRequest("assets/floorplan.swf"));