我正在创建一个游戏,它使用 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/