Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 使用SWCs-getDefinitionByName问题_Flash_Actionscript 3_Swc - Fatal编程技术网

Flash 使用SWCs-getDefinitionByName问题

Flash 使用SWCs-getDefinitionByName问题,flash,actionscript-3,swc,Flash,Actionscript 3,Swc,我在佛罗里达州有一堆图形资源,MovieClips链接到一些类。我将fla导出为swc,并使用“合并为代码”选项将其添加到我的库中 所有这些都很好,我可以创建MovieClips的实例,只需像这样调用它们的类 //example 1 var newMc:BaseClass = new GraphicAsset(); 现在,如果我想执行以下操作,Flash会抛出一个错误,GraphicsAssetClass为null //example 2 var Graph

我在佛罗里达州有一堆图形资源,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中的某个地方,则
GraphicsAsset
的类定义将包含在最终SWF中。然后你可以打电话给

var GraphicsAssetClass:Class = getDefinitionByName("GraphicAsset") as Class;
完全是从别的地方来的,它会像你期望的那样工作

在seaprate主权财富基金中找到这两条线甚至是可能的(也是很常见的)。在这种情况下,一个swf将在运行时加载另一个swf。通常,加载程序swf将使用
getDefinitionByName(“SomeClass)
,加载的swf将定义
class SomeClass
,并使用
var a:SomeClass;
,以确保类内置到swf中

因此,您经常会在“library swf”中定义一个名为“MyLibraryManifest”的类,然后从该swf的主要电影剪辑中引用该类。然后,“manifest”类将如下所示:

class MyLibraryManifest {

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

   //... and so on...

}

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

有关mxmlc命令行选项的说明

这些选项也可以是,允许您控制flex和/或Flash IDE如何在幕后调用编译器


祝你好运!

使用FlashDevelop修复此问题非常简单

右键单击项目列表中包含的swc。选择选项,然后选择“包含库(完整库)”


…您现在可以使用getDefinitionByName从swc文件中获取未引用的类。

GraphicsAsset的完全限定类名是什么?它只是
GraphicsAsset
还是也有一个包?不,我没有使用包。请注意,示例1和3运行良好,除了示例3不实用之外,这或多或少是什么我现在正在做。我有一个类,它只是一个变量列表。每当我添加一个新资产时,我都会向列表中添加一个新变量。我希望我可以避免这一步。谢谢你的回答!@patrick-刚刚添加了一个编辑,它提供了一个替代方法,使用mxmlc编译器的命令行选项(我每次都要去查一下。);)这还能用吗?当我尝试这样做的时候,我仍然会遇到同样的问题。我需要在SWC中设置编译选项吗?