AS3 MovieClip 名称歧义

AS3 MovieClip name ambiguity

总结:我使用库中定义的 MovieClip class 对象通过 AS3 创建各种 MovieClip 的实例。

当每个 MC 被实例化时,我将它推入一个数组以供以后参考。

最后,我创建了一个 XML 文件,其中包含与每个 MC 相关的数据,包括其名称。这是有问题的部分——当读回 XML 时,名称必须能够识别相应的 MC。我不想要“instance17”等,我认为这在另一个会话中将毫无意义。

背景:我不是职业 OO 程序员,这是一项临时任务,仅占我长期兴趣的一小部分。我的下一个 Flash 项目可能要过几年。

创建实例

库对象 类型:MovieClip,联动_brakepipe

实例化

var brakepipe: _brakepipe = new _brakepipe();
shapes.push(brakepipe);

以后

var clip: MovieClip = shapes(i);
Trace (clip);

这产生

[object _breakpipe]

所以它给我 class 名称,而不是 MC 实例名称。什么 属性 或 MC 方法会产生“breakpipe”? (甚至是“_breakpipe”——没有 "object" 前缀?)

The Instantiation / Then later / This yields...对我来说似乎不清楚,但你可以试试这个并更改代码...

因为我不确定不确定你要存储的实例名称...

如果剪辑是 MovieClip,您可以在循环中执行此操作! :

var clip: MovieClip = shapes(i);
clip.name = "breakpipe_" + i
trace (clip.name);

// will output : breakpipe_1 - > breakpipe_n...

如果需要,您可以稍后通过删除多余的“_number”来处理 clip.name。

如果我==13

var clip: MovieClip = new MovieClip();
clip.name = "breakpipe_" + 13
trace(clip.name);
// output breakpipe_13
var pattern:RegExp = /_\d*/g;
trace(clip.name.replace(pattern,""));
//output :
//breakpipe

所以在这里,您可以使用实例名称推送您的 Array 或 Vector。 我错了吗?

您可以使用关联数组。它可能看起来像这样:

var shapes:Array = new Array();

然后

shapes.push({item:_brakepipe,_name:"brakepipe"};

本质上,大括号创建一个 Object 实例,冒号前的名称 (:) 是您创建的名称,您希望它与冒号后的值相关联。

所以现在你可以循环执行此操作

trace(shapes[i]._name+"\n"+shapes[i].item);
// output: 
// brakepipe
// [object _brakepipe]

此方法的好处在于您可以将其扩展为任意数量的要与数组元素相关联的属性,如下所示:

shapes.push({item:_brakepipe,_name:"brakepipe",urlLink:"http://www.sierra.com",_status:"used",_flagged:"false"};

现在

shapes[i]._status

会 return 字符串“used”。您可以通过

在运行时将该值更改为“new
shapes[i]._status = "new";