2011-06-21 29 views
0

我想知道您是否可以提供帮助,我认为这是相对简单的事情 - 但令人吃惊!Flash AS3事件传播

我有一个影片剪辑列表,每个影片剪辑都包含一个实例名称为Mbtn的按钮。我希望按钮仅在鼠标悬停在父剪辑上时才会显示。该结构基本上是一个称为pcs的父剪辑,5个子剪辑(在下面命名),每个剪辑包含一个实例名称为mBtn的按钮。这里是我的代码 -

hr_pc.mBtn.visible=false; 
m_pc.mBtn.visible=false; 
me_pc.mBtn.visible=false; 
d_pc.mBtn.visible=false; 
di_pc.mBtn.visible=false; 




pcs.addEventListener(MouseEvent.ROLL_OVER, mOver); 
pcs.addEventListener(MouseEvent.ROLL_OUT, mOut); 

function mOver(evt:MouseEvent):void 
{ 
var overNow = evt.currentTarget.name; 
overNow.mBtn.visible=true; 


} 
function mOut(evt:MouseEvent):void 
{ 
var overNot = evt.currentTarget.name; 
overNot.mBtn.visible=false; 
} 

我敢肯定有一个更好的方式来做到这一点 - 任何建议非常感激地收到!

感谢 保罗

+1

时间行代码阅读起来===坏 –

+0

究竟什么是你问?我从你的帖子中了解到,你发布的代码是“令人沮丧的”。 –

回答

1
evt.currentTarget.name 

意味着,现在,你的目标你的容器对象(pcs),而不是内容(hr_pc, m_pc等)。这是evt.targetevt.currentTarget之间的主要区别。如果您追踪当前目标名称,则它对于每个预期目标都是相同的。 所以,整顿,你当然可以使这项工作与

evt.target.name 

你可能有问题,但是,如果你将鼠标放在按钮,则目标将不再是按钮直接父(这将是按钮本身),并且该按钮很可能再次触发visible=false

我可能会走这个不同的方向:写一个包含按钮和它自己的侦听器的类。如果有很多共享行为(但取决于您的需求,可能不会),这将是一个很好的计划。

所以,是的,在currentTarget vs target

+1

和真实的,@ The_asMan是对的:时间轴代码不好,不惜一切代价避免。 – Bosworth99

+0

不是'evt.target.name'只是一个字符串?应该是'evt.target'以获得对DisplayObject的引用。 – alxx

+0

@alxx =我在引用OP的帖子 - 他似乎是在他的逻辑中使用实例名称,我只是跟着那个。但是,是的,你绝对是对的=名字道具只是一个字符串。 – Bosworth99