0

我在将 MovieClip 附加到类的不同实例时遇到问题。老实说,我对 ActionScript 3 有点陌生,所以这个问题可能有点无聊。不过,我进行了研究,但没有找到我期望的答案。

function AddNewElement(clip:MovieClip, array:Array, name:String, firstValue:int, secondValue:int):Element

您可能已经猜到了,这是我创建的用于以动态方式创建类实例并将它们添加到数组中的函数。不过,我的第一个参数有问题。如何将我的库中的 MovieClip 传递给此函数?

我看到很多与此类似的问题的答案,指出每个 MovieClip 都应该是一个独立的类,但是由于我有 40 个 MC,我想将它们全部用于或多或少相同的事情,我觉得它会杀死上课的目的,真的。

我应该如何处理这个?

4

3 回答 3

1

首先,您需要在导出时或稍后从“属性”选项中为您的库符号提供链接部分的唯一类名称。当您在此处选中“Export for ActionScript”选项时,您将看到此输入。然后您需要实例化您的库符号(使用new关键字)并将其转换为 MovieClip 以传递给此函数。所以

  • AddNewElement(new LibrarySymbolClass() as MovieClip,[],'etc',0,0);
  • AddNewElement(MovieClip(new LibrarySymbolClass()),[],'etc',0,0);

两者都会让你做你想做的事。

但是,由于并非所有库元素都需要扩展 MovieClip 类,因此您最好选择DisplayObject而不是MovieClip. 因此,您的功能的更好版本将是

import flash.display.DisplayObject;

function AddNewElement(clip:DisplayObject, ...):* {
    // some code here
    return clip;
}
var clip:LibrarySymbolClass = AddNewElement(new LibrarySymbolClass() as DisplayObject,[],'etc',0,0);
trace(clip);

在返回值类型中使用星号将让它返回具有正确类型的对象(如[object LibrarySymbolClass]本例所示)。

于 2013-01-05T05:20:28.643 回答
0

当您在 Flash 中创建 MovieClip 时,它会为您提供某些选项,其中一个选项是让 Flash 为该 MovieClip 创建一个类。话虽如此,如果您将该选项应用于所有 40 个影片剪辑,那么您将创建类似于主影片剪辑类的内容,并让每个影片剪辑类扩展主影片剪辑类。唯一的事情是您必须为 40 个影片剪辑中的每一个创建一个 .as 文件并添加extends MasterMovieClip到类声明中。例如:

public class MasterMovieClip extends MovieClip {
    // All of the variables and methods pertaining to each movie clip go here
}


然后每个单独的影片剪辑将类似于此类。

public class IndividualMovieClip_1 extends MasterMovieClip {
    // Just include a constructor, even though you don't have to
}


现在,您所有的单个影片剪辑都将具有相同的方法和变量,只要所述方法和变量是公共的,而不是私有的。

使用这种方法,您必须创建所有 40 个类,但是在 Flash 中可能有一种方法可以在创建新影片剪辑时设置影片剪辑扩展的类,然后您就不必创建 40 个不同的类。



更新:

我重新阅读了您的问题并想到了其他内容,即我在第一句话中谈到的那个选项,关于 Flash 提供了创建类的选项。好吧,如果没有给出一个类,那么 Flash 将在运行时动态创建一个类。我认为当它动态创建一个类时,它不会保持与库影片剪辑相同的名称,因此当您尝试将影片剪辑的静态名称传递给您的函数时,它不知道您在谈论什么并引发运行时错误。

于 2013-01-05T03:37:25.393 回答
0

为什么不在运行时创建影片剪辑,又名。在运行时执行上下文中创建它们,然后在调用类时实例化它们中的每一个。如果每个 MC 都不同,那么您可以为每个 MC 类创建一个以升序结尾的名称,然后使用 for 循环将它们放入一个数组中,如下所示:

var mc_num:int = 40 // the number of MovieClips
var arr:Array = new Array();

for (var i:int=0; i < mc_num; i++) {
    arr.push("myMovieClip" + String(i)); 
}

..然后通过使用数组索引来引用它们中的每一个。我跳过了将图像与 MovieClip 相关联的部分。

之后,您调用所需的 MC,如下所示:

var mc_1:MovieClip = arr[1] as MovieClip;
stage.addChild(mc_1);
于 2013-01-05T03:45:54.977 回答