gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:45:44 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com