从外部 SWF 设置 Class - 隐式强制

Setting Class from External SWF - Implicit Coercion

我正在尝试将 SWF 加载到我的主文件中。 SWF 为 ColorWheel.swf,主文件为 c_test.as。这是我的代码:

var loader:Loader = new Loader();   
this.addChild(loader);
loader.load(new URLRequest("ColorWheel.swf"));  
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,imageLoaded);
var myClass:Class;

function imageLoaded(e:Event):Class
{
   loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,imageLoaded);    
   return loader.contentLoaderInfo.applicationDomain.getDefinition("StageColorWheel") as Class;
}

myClass = imageLoaded;
var myWheel:BitmapData = new myClass();

这给了我一个隐含的强制转换错误 myClass = imageLoaded。我相当确定这是一个简单的修复,但如果有人有答案,我将不胜感激。这是我之前的当前代码(有效,但是 将 swf 加载到 c_test.as 后的所有内容 都包含在 imageLoaded 函数中。

var loader:Loader = new Loader();   
this.addChild(loader);
loader.load(new URLRequest("ColorWheel.swf"));  
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,imageLoaded);
var myClass:Class;

function imageLoaded(e:Event):Class
{
   loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,imageLoaded);    
   myClass = loader.contentLoaderInfo.applicationDomain.getDefinition("StageColorWheel") as Class;

   var myWheel:BitmapData = new myClass();
   //rest of code - works
}

为了说明实际错误的原因,在以下行中:

myClass = imageLoaded;

您没有调用该函数,因为您缺少括号 ()。应该是:

myClass = imageLoaded();

没有括号 (),您只是将函数本身的引用分配给 myClass var,这是导致错误的原因,因为 var 需要保存一个 Class 参考不是 Function 参考。

但是,即使您更正了它,也不会正常工作。

imageLoaded() 方法只应 运行 加载完成后(事实上它会 运行 当它完成时,因为你有它也作为事件处理程序)。

在您执行 myClass = imageLoaded() 时,加载程序尚未完成加载,因此您的结果将是 different/null。

你的第二种方法是解决这个问题的合适方法。