AS3 MovieClip名称歧义

时间:2016-10-05 00:35:47

标签: actionscript-3 instantiation movieclip objectname

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

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

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

背景:我不是职业OO程序员,这是一项临时任务,只是我长期利益的一小部分。在我的下一个Flash项目之前可能还需要几年时间。

创建实例

图书馆对象 键入:MovieClip,linkage _brakepipe

实例化



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




稍后



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




这会产生     



[object _breakpipe]




所以它给了我类名,而不是MC实例名。 MC的哪些属性或方法会产生“breakpipe”? (甚至" _breakpipe" - 没有"对象"前缀?)

2 个答案:

答案 0 :(得分:1)

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

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

将返回字符串“used”。您可以通过执行

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

答案 1 :(得分:0)

实例化/然后稍后/这会产生......似乎对我来说不清楚,但你可以试试这个并改变代码......

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

在你的循环中,如果剪辑是MovieClip,你可以这样做! :

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

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

您可以稍后通过删除额外的" _number"来处理clip.name。如果你愿意的话。

如果i == 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。 我错了吗?