gpt4 book ai didi

flash - 使用 SWC - getDefinitionByName 问题

转载 作者:行者123 更新时间:2023-12-04 06:27:36 25 4
gpt4 key购买 nike

我在 fla 中有一堆图形 Assets ,MovieClips 链接到一些类。我将 fla 导出为 swc ,并使用“合并到代码”选项将其添加到我的库中。

一切都很好,我可以创建我的 MovieClips 的实例,只需像这样调用它们的类。

     //example 1
var newMc:BaseClass = new GraphicAsset();

现在,如果我想执行以下操作,Flash 会抛出错误,GraphicsAssetClass 为 null!
    //example 2
var GraphicsAssetClass:Class = getDefinitionByName("GraphicAsset") as Class;

我可以让上述行工作的唯一方法就是这样做
    //example 3
var newMc:GraphicAsset;
var GraphicsAssetClass:Class = getDefinitionByName("GraphicAsset") as Class;

//then I'm able to do this
var newMc:BaseClass = new GraphicsAssetClass();

你能想出一个解决方案,我可以通过调用 getDefinitionByName() 来简单地获取类
就像我在示例 2 上所做的那样,而不必求助于示例 3 解决方案。

最佳答案

问题是编译器会排除在代码中没有直接引用的任何类。这是编译器按设计应用的优化。

解决此问题的正常方法与您在“示例 3”中显示的完全相同。但重要的是要注意,两条线不必在同一个地方在一起。只要

var newMc:GraphicAsset;

位于您的 SWF 中的某个位置,从执行的主路径引用,然后是 GraphicAsset 的类定义将包含在最终的 swf 中。然后你可以打电话...
var GraphicsAssetClass:Class = getDefinitionByName("GraphicAsset") as Class;

完全来自其他地方,它会按您的预期工作。

甚至有可能(而且很常见)在分离的 SWF 中找到这两行。在这种情况下,一个 swf 会在运行时加载另一个 swf。通常,加载器 swf 将是使用 getDefinitionByName("SomeClass) 的那个。 ,并且加载的 swf 将是定义 class SomeClass 的那个。 ,并使用 var a:SomeClass; , 以确保将类内置到 swf 中。

出于这个原因,您经常会发现一个名为“MyLibraryManifest”的类在“库 swf”中定义,然后从该 swf 的主影片剪辑中引用。然后“ list ”类将看起来像这样:
class MyLibraryManifest {

private var a:GraphicAsset;
private var b:SomeClass;
private var c:SomeOtherClass;

//... and so on...

}

[编辑] 您可以使用 -includes-include-libraries mxmlc 的选项编译器,强制链接器包含一个或多个单独的类(或整个 swc),而不应用我上面描述的“修剪优化”。

see adobe's site用于解释 mxmlc 命令行选项。

选项也可以是 specified in a config file ,允许您控制 flex 和/或 Flash IDE 如何在幕后调用编译器。

祝你好运!

关于flash - 使用 SWC - getDefinitionByName 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4103641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com