如何获取动态创建的 Flash 舞台上的 MovieClip 名称?
Posted
技术标签:
【中文标题】如何获取动态创建的 Flash 舞台上的 MovieClip 名称?【英文标题】:How to get name of MovieClip on Flash stage that was created dynamically? 【发布时间】:2011-03-31 06:11:53 【问题描述】:有多个将动态放置在舞台上的影片剪辑。这些影片剪辑被编码为按钮。我试图弄清楚——当用户点击 MovieClip 时...找出用户点击了 flash 舞台上的哪个对象。
在函数toggleClick里面我放了trace语句:
trace("movieClip Instance Name = " + e.target.name);
在输出窗口中:
movieClip Instance Name = instance5
movieClip Instance Name = instance12
movieClip Instance Name = instance5
movieClip Instance Name = instance32
movieClip Instance Name = instance5
movieClip Instance Name = instance59
这似乎不是获取被点击的电影剪辑名称的方法。
getChildByName() 是这样做的吗?如果是这样,任何想法如何使用 getChildByName() 来获取被点击的电影剪辑的名称?
【问题讨论】:
【参考方案1】:在 AS3 中,当您创建 MovieClip 时,动态 flash 会为它分配一个只读实例名称,就像您看到的一样(例如实例 12)。找出点击了哪个影片剪辑的最佳方法是简单地使用 MouseEvent 的 currentTarget/target (在此处查看两者之间的区别:http://www.wastedpotential.com/?p=10)。
你会这样使用它:
var foo:MovieClip = new MovieClip();
foo.graphics.drawRect(0, 0, 100, 50);
stage.addChild(foo);
foo.addEventListener(MouseEvent.CLICK, clickHandler);
var bar:MovieClip = new MovieClip();
bar.graphics.drawRect(0, 0, 100, 50); bar.y = 100;
stage.addChild(bar);
bar.addEventListener(MouseEvent.CLICK, clickHandler);
//this function will set the x to 100 and the width to 50 of the clicked MovieClip
function clickHandler(e:MouseEvent):void
e.currentTarget.x = 100;
e.currentTarget.width = 50;
【讨论】:
使用 currentTarget 很有帮助。我能够在“链接对话框区域/框”中获得分配给 MovieClip 的类名。类名叫做 Comp。 (MovieClip 内部是计算机的图形。类名称 Comp 的原因。) OUTPUT 窗口显示: MovieClip Instance Name = [object Comp] 看起来不错,但我不是 100% 确定如何使用名称 [object Comp ] 在我的下一步。我只想要名称 Comp...而不是 [object Comp]。 @crew: 你可以说e.target.name.substr(7)
top 去掉String
的前7个字符。
使用 getQualifiedClassName (adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/utils/…)【参考方案2】:
在向舞台添加按钮之前,您可以实际命名它
var myButton:MovieClip = new MovieClip();
myButton.name = 'button1';
或
var myButton:MovieClip = new MyButton(); //if you assigned a class name to your MovieClip
myButton.name = 'button1';
使用您的示例,您可以执行以下操作:
var comp:Comp = new Comp();
var monitor:Monitor = new Monitor();
addItemButton( comp, "comp" , x:100, y:200);
addItemButton( monitor, "monitor" , x:30 , y:50 );
private function addItemButton(item:MovieClip , itemName:String , params:Object):void
item.addEventListener(MouseEvent.CLICK , clickHandler );
item.name = itemName;
// of course params is not necessary, just making a point of
// how to centralize your concerns
item.x = params.x;
items.y = params.y;
addChild( item);
private function clickHandler(event:MouseEvent):void
trace( "button clicked:" + event.currentTarget.name );
【讨论】:
感谢您向我展示了动态加载的 MovieClip 名称是可能的。我相信它非常有用。我认为我可以命名 MovieClips 实例的唯一方法是手动将 MC 从库中拖到舞台上 - 并在属性面板中对其进行命名。以上是关于如何获取动态创建的 Flash 舞台上的 MovieClip 名称?的主要内容,如果未能解决你的问题,请参考以下文章
iOS 上的 Flash/AIR 舞台视频 - 有可能吗?表现如何?
Flash Pro cc 为啥我手机上的舞台宽度和高度设置为Flash pro里面的?