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

时间:2015-09-23 15:58:03

标签: actionscript-3 flash

我正在尝试将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。我相当肯定这是一个简单的解决方案,但如果有人有答案我会非常感激。这是我之前的当前代码(有效,但加载到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
}

1 个答案:

答案 0 :(得分:1)

要涵盖实际错误的原因,请参阅以下行:

myClass = imageLoaded;

您没有调用该函数,因为您错过了括号()。它应该是:

myClass = imageLoaded();

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

但是,即使你纠正了这一点,这也行不通。

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

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

你的第二种做法是采取适当的方式。