ReferenceError: Error #1065: 变量 ComponentShim 未定义
最近弄UI,一个游戏的UI,文件大得要命,关键很容易出错。
上面这个错误整整花了半天的时间才解决。下面说说这个问题:
起因:从别的文件拷贝了一个按钮过来新的文件,在新的文件里面把该按钮改成了MovieClip,同时导出类,继承了MovieClip的一个类。
现象:提示ReferenceError: Error #1065: 变量 ComponentShim 未定义
同时伴有编译错误:ButtonPublic.as 5000: 类'ButtonPublic'必须为'flash.display.SimpleButton'的子类,因为它链接到该类型的库元件。
这就是个莫名其妙的地方,明明已经把按钮改成了MovieClip,所有舞台上面的实例都已经设置成了MovieClip,FlashIDE还是偏偏要把它认成一个按钮。
仔细观察发现,元件的属性里面有个源:引用了一个源fla文件,以及其中的元件,我猜想可能是这里有问题,每次编译的时候都会以这个为准。
因此新建了一个元件,把里面的内容转移到新元件里面,同样导出类,继承MovieClip。这下编译通过,问题解决。
这可能算是FlashIDE的一个Bug吧。
总结下:就是FlashIDE编译的时候,会去复制过来的源文件中更新库里面的文件,即使你不勾选总在发布时更新,这个元件还是保留了原始的文件里面的类型信息。
建议:把一个元件从按钮转成影片剪辑的时候,最好新建一个元件,把按钮里面的内容拷贝进这个新文件,再使用FlashIDE的查找替换功能,把原来的按钮替换成这个新元件。