【问题标题】:as3 Buttonmode not workingas3 按钮模式不起作用
【发布时间】:2014-05-09 20:32:11
【问题描述】:

我什至不确定这是否是可以通过代码解决的问题。我在一个数组中有简单的影片剪辑,我试图将点击事件侦听器添加到其中,我可以将 buttonMode 更改为 true 并添加事件侦听器,但只有一个影片剪辑实际上显示了 buttonMode 和事件的行为变化监听器。

for(var d:int = 0; d < doors.length; d++)
{
    doors[d].buttonMode = true;
    doors[d].addEventListener(MouseEvent.CLICK, doorClick);

    trace(doors[d].buttonMode);
    trace(doors[d].hasEventListener(MouseEvent.CLICK));
}

所有跟踪都返回 true,我跟踪了 ddoors[d] 以确保问题不在于数组,但不是,只有索引 1 处的门按预期工作。如何找到侦听器不工作的原因?

【问题讨论】:

  • 会不会有其他的电影剪辑与某些门重叠?
  • 尝试设置doors[d].mouseEnabled=true
  • @dene,我很担心,但我把它们移到了顶部,并没有改变任何东西。如果在那之后动态添加了某些东西,我怎么知道它们相交?
  • @VBCPP,非常好的主意,但它并没有改变行为

标签: actionscript-3 events click addeventlistener mouseclick-event


【解决方案1】:

隔离你的门和环路。该代码将在没有其他元素的情况下自行运行。我以前也遇到过同样的问题,通常是因为另一个影片剪辑的不可见部分覆盖了按钮对象。

如果您要动态添加其他可能覆盖门的影片剪辑,请找到这些对象的容器影片剪辑并将其属性mouseEnabledmouseChildren 设置为false。容器及其子对象将不再接收鼠标点击而不是您的门影片剪辑。

这里的答案为我澄清了这个问题:

https://stackoverflow.com/a/2686510/629407

【讨论】:

  • 有什么方法可以追踪拦截 mouseEvent 的内容吗?我有几十层,没有任何东西明显与门相交
  • stage.addEventListener(MouseEvent.CLICK, testClick);
  • 在testClick函数中,trace(event.target);
  • 这就像魔术。我一直在使用 currentTarget。有什么理由我不应该将所有 currentTargets 都更改为目标?
  • 我通常使用currentTarget,因为当我做someObject.addEventListener()时,someObject通常是我想要在函数处理程序中操作的。如果单击 someObject 的子对象,则 event.target 将引用该子对象,这可能很有用 stackoverflow.com/q/5921413
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-23
  • 2014-04-26
  • 2023-03-26
  • 1970-01-01
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多