2013-10-23 65 views
0

我正在做一些简单的代码。我有一个类插件,是为了进行扩展,具有功能INITIALISE():错误#1034:类型强制失败:无法将类转换为同一类?

package me.bleachisback.cocmod { 
    import me.bleachisback.cocmod.CoCMain; 

    public class Plugin { 
     private var _main:CoCMain; 
     private var _name:String; 
     private var _desc:String; 
     private var _ver:String; 
     private var _auth:String; 
     internal var _enabled:Boolean = false; 

     internal function initialise(main:CoCMain, name:String, description:String, version:String, author:String):void { 
      _main = main; 
      _name = name; 
      _desc = description; 
      _ver = version; 
      _auth = author; 
     } 
    } 
} 

我的主类加载插件,然后初始化它们:

package me.bleachisback.cocmod { 
    import me.bleachisback.cocmod.Plugin; 

    public class CoCMain extends MovieClip { 
     private function pluginLoadingComplete(e:Event):void { 
      //This class extends Plugin 
      var plugin:Object = new e.target.content.mainClass(); 
      var desc:XML = new XML(e.target.content.description); 
      trace(this); //outputs: [object CoCMain] 
      plugin.initialise(this, desc.name[0], desc.description[0], desc.version[0], desc.author[0]); 
     } 
    } 
} 

但在最终,当我尝试使用INITIALISE功能,它给了我这个错误:

TypeError: Error #1034: Type Coercion failed: cannot convert me.bleachisback.cocmod::[email protected] to me.bleachisback.cocmod.CoCMain. 
    at me.bleachisback.cocmod::CoCMain/pluginLoadingComplete() 

难不成我不能在一个类转换为自身???

+0

你试图沿...'VAR插件线做一些事情:e.target.content.mainClass()=新e.target.content.mainClass ();'或设置一个类变量...'var newClass:Class = e.target.content.mainClass();'然后'var plugin:newClass = new newClass();' –

+0

是的,那就是我然后它给了我这个错误:'1046:Type找不到或者不是编译时常量:newClass'。我也尝试过'var plugin:Plugin = new e.target.content.mainClass();'但是它只是给了我这个错误:'错误#1034:类型强制失败:无法转换plugin.bleachisback.testPlugin :: TestMain @ afc6309 to me.bleachisback.cocmod.Plugin'即使TestMain扩展插件。 – user2885503

+0

在初始化函数中,尝试初始化'_main',然后将它设置为'main',即'_main = new CoCMain();'然后'_main = main'。错误是说你试图将'CoCMain @ 4dfc041'这个'CoCMain对象'在内存位置'4dfc041'上转换成'Class'。 –

回答

0

当您加载外部SWF时,您可以指定要在其中加载类定义的applicationDomain。默认情况下,外部加载的SWF会将其类定义放在新的应用程序域中,因此在原始应用程序域中不会替换名称相同的类。

尝试将SWF加载到当前应用程序域,像这样:

var ldrContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain); 

注意ApplicationDomain.currentDomain来创建的LoaderContext时。

您可以查看这里的例子: http://help.adobe.com/en_US/as3/dev/WSd75bf4610ec9e22f43855da312214da1d8f-8000.html

+0

我试过了,但是当我把'trace(e.target.applicationDomain == ApplicationDomain.currentDomain);'放在pluginLoadingComplete()中时,它输出为false,而且我仍然得到相同的错误。 – user2885503

+0

您是否将loaderContext传递给正在使用的加载器的加载方法?像这样: 'ldr.load(req,ldrContext);' – Jotakun

+0

'loader.load(url,new LoaderContext(false,ApplicationDomain.currentDomain));'是我正在使用的。 – user2885503

相关问题