0

我正在使用 ActionScript 开发移动应用程序。

我正在导入 .swf 文件但出现错误:

Type was not found or was not a compile-time constant: MySwf.

这是我的代码:

package
{
import flash.display.Sprite;
import flash.display.StageAlign;

    public class gyyyyppp extends Sprite
 {
    [Embed(source='assets/g1.swf')] public static const MySwf : Class;

    public function gyyyyppp()
    {
        stage.align = StageAlign.TOP_LEFT;

        var p3:MySwf= new MySwf();

        addChild(p3);
    }
  }
}

我做错了什么?

(ps 我的 swf 文件是用非 ​​adobe 程序制作的)我正在使用 Flash Builder

4

2 回答 2

3

我不认为你可以将嵌入类设置为变量类型,试试这个:

var p3:MovieClip = new MySwf();
于 2013-01-31T23:24:43.607 回答
3

我假设您希望能够调用嵌入式 SWF 的自定义方法。如果你只是想使用这个 SWF 中的图形,那么 @ MickMalone1983的答案就是你需要的,除了 SWF 的内容可能不是MovieClip但是Sprite,例如,所以使用DisplayObjecttype:更安全var p3:DisplayObject = new MySwf()

调用自定义方法的问题在于,您不能引用嵌入(或加载)SWF 中定义的类,因为编译器无法链接到此类。因此,您必须编写一个接口,其中包含应该可以从外部访问的方法,然后

  1. 通过嵌入式 SWF 的主类实现该接口:

    public class MySwf extends Sprite implements MyInterface ...
    
  2. 使用Loaderobject 实例化嵌入的 SWF 并将实例转换为相同的接口:

    [Embed(source='assets/g1.swf', mimeType='application/octet-stream')]
    public static const MySwfData : Class;
    
    public function load()
    {
        var loader:Loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onSwfLoaded);
            // we need the loaded code to be in the same (main) application domain
            loader.loadBytes(new MySwfData() as ByteArray, new LoaderContext(false, loaderInfo.applicationDomain));
    }
    
    private function onSwfLoaded(e:Event):void
    {
        var p3:MyInterface = (e.target as LoaderInfo).content as MyInterface;
            p3.myCustomMethod(); // myCustomMethod is defined in MyInterface
    
        addChild(p3 as DisplayObject);
    }
    

这样,您将能够调用嵌入式 SWF 的自定义方法,因为它们将在嵌入式 SWF 和主应用程序中定义。

此外,通常您-static-link-runtime-shared-libraries=true在编译主应用程序时需要指定编译器标志。

于 2013-02-01T00:55:24.917 回答