actionscript-3 - 停止将 displayList View 的 MouseEvent 传播到 starling View

标签 actionscript-3 mouseevent starling-framework displaylist

我正在创建一个游戏,它使用 starling-layer(游戏本身)和包含多个弹出窗口和类似内容的经典显示列表。

有一件事困扰着我: 如果 MouseEvents 是在 displayList-elements 上生成的,它们总是会通过 starling 层并产生 TouchEvents 等,这非常烦人。

我想知道是否有一些通用(且易于使用)的方法来处理这个问题。

一种可能性是监听所有显示列表元素的以下事件:

interfaceElement.addEventListener(MouseEvent.MOUSE_MOVE, stopPropagationHandler);
interfaceElement.addEventListener(MouseEvent.MOUSE_DOWN, stopPropagationHandler);
interfaceElement.addEventListener(MouseEvent.MOUSE_UP, stopPropagationHandler);

private function stopPropagationHandler(e:MouseEvent):void {
    e.stopPropagation();
}

但这对我来说看起来很讨厌。 即使我那样做了,我还有一个问题: 如果八哥元素在该显示列表元素下方,并且如果它具有用于翻转行为的 TouchEvent.TOUCH >> 如果将鼠标悬停在显示列表元素上,则不会从八哥移除翻转外观。

我还考虑过在每个显示列表元素后面放置一个虚拟八哥元素,...以停止事件...但是对于这样一个“简单”的任务来说,这一切听起来有点“过于复杂”。 还是我遗漏了什么?

如有提示,将不胜感激。 谢谢。

最佳答案

您可以在显示列表(不是舞台)中创建 1 个主容器并监听 ROLL_OVER 和 ROLL_OUT,并在那里设置某种全局标志,即您的鼠标位于显示列表容器上。然后在你的八哥事件中,检查这个标志。我猜这不是最好的解决方案,但它应该可以工作

var isOverDisplayList:Boolean = false;
container.addEventListener(MouseEvent.ROLL_OVER, onRollOver);
container.addEventListener(MouseEvent.ROLL_OUT, onRollOut);

function onRollOver(e:MouseEvent) {
  isOverDisplayList = true;
}

function onRollOut(e:MouseEvent) {
  isOverDisplayList = false;
}

关于actionscript-3 - 停止将 displayList View 的 MouseEvent 传播到 starling View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17294339/

相关文章:

actionscript-3 - 来自 AIR 应用程序的电话调用

actionscript-3 - 在 AS3 中,如何覆盖 [] 运算符的 setter 和 getter?

javascript - Flash 阻塞 javascript 事件

JavaScript 通过代码模拟右键单击

air - 停留在 "Sending API usage to iTunes Connect"

actionscript-3 - 通过actionscript的合约工具进行设计

qt - QML:同步滚动多个ListView

WPF:图片点击事件

actionscript-3 - Starling 框架中的计时器

actionscript-3 - Starling - 将 SWF 图像(矢量)加载到图像中