从外部 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。
你的第二种方法是解决这个问题的合适方法。
我正在尝试将 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。
你的第二种方法是解决这个问题的合适方法。