我正在尝试设置菜单。因为这个菜单可以有不同数量的条目,所以我生成它而不是硬编码。 Menu对象包含一个MenuEntry对象数组,每个MenuEntry都有一个framework.Button对象,其中包含实际绘制到屏幕上的文本和框。我可以将ButtonEvent.Click事件添加到Button,但不能添加MenuEntry。但是,如果我这样做,我将无法访问包含该按钮的MenuEntry对象中的数据,因此我不知道单击了哪个MenuEntry。
我能想到的唯一解决方案是根据菜单项的数量,检查每个MenuEntry位置的鼠标位置。但这似乎不是正确的方法,因为它不可扩展。我尝试让MenuEntry类扩展Button类,所以从理论上讲,MenuEntry本身可以发送鼠标点击事件,但这不起作用。
答案 0 :(得分:3)
如果MenuEntry
个对象不是显示对象,您可以遍历MenuEntry
数组,并比较该按钮是否与e.currentTarget
相同,以找到MenuEntry
点击了。
button.addEventListener(MouseEvent.CLICK, clickHandler);
function clickHandler(e:MouseEvent):void
{
var t:DisplayObject = DisplayObject(e.currentTarget);
var menuEntry:MenuEntry;
for(var i:Number = 0; i < menuEntries.length; i++)
{
if(menuEntries[i].button == t)
{
menuEntry = t;
break;
}
}
trace(menuEntry);
}
如果MenuEntry项确实是显示对象,您可以从按钮的parent
属性中获取对它们的引用
box.addEventListener(MouseEvent.CLICK, clickHandler);
function clickHandler(e:MouseEvent):void
{
var t:DisplayObject = DisplayObject(e.currentTarget);
trace(t);//traces box
trace(t.parent);/* traces box's parent which can be
the same as root if box is added
as child to the root */
trace(t.root);//traces the root
traceParents(t);
}
traceParents(t:DisplayObject):void
{
var p:DisplayObjectContainer = t.parent;
while(p != null)
{
trace(p);
p = p.parent;
}
}