Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 停止从displayList视图到starling视图的MouseeEvent传播_Actionscript 3_Mouseevent_Starling Framework_Displaylist - Fatal编程技术网

Actionscript 3 停止从displayList视图到starling视图的MouseeEvent传播

Actionscript 3 停止从displayList视图到starling视图的MouseeEvent传播,actionscript-3,mouseevent,starling-framework,displaylist,Actionscript 3,Mouseevent,Starling Framework,Displaylist,我正在创建一个使用starling层(游戏本身)和经典显示列表的游戏,其中包含几个弹出窗口和类似的东西 我有一件事困扰着我: 如果在displayList元素上生成MouseEvents,它们总是会进入starling层,并生成TouchEvents等,这非常烦人 我想知道是否有一些通用(且易于使用)的方法来处理这个问题 一种可能性是在所有displayList元素上侦听以下事件: interfaceElement.addEventListener(MouseEvent.MOUSE_MOVE,

我正在创建一个使用starling层(游戏本身)和经典显示列表的游戏,其中包含几个弹出窗口和类似的东西

我有一件事困扰着我: 如果在displayList元素上生成MouseEvents,它们总是会进入starling层,并生成TouchEvents等,这非常烦人

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

一种可能性是在所有displayList元素上侦听以下事件:

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的滚动行为>>则如果将鼠标悬停在显示列表元素上,则不会从椋鸟中删除滚动外观

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

如果您能给我一个提示,我们将不胜感激。
谢谢。

您可以在显示列表(而不是舞台)中创建一个主容器,监听滚动和滚动,并在那里设置某种全局标志,即您的鼠标位于显示列表容器上。然后在你的八哥比赛中,检查这面旗帜。我想这不是最好的解决方案,但它应该能起作用

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;
}

我想说的是,使用一个全局可用的标志而不是事件传播块,如果有模式弹出窗口,将设置该标志,这样starling级别的每个事件处理程序将首先检查是否已设置,如果已设置,则返回,这样您的SWF中的starling部分将在弹出窗口时表现得好像什么也没有发生一样。@Vesper谢谢。。但正如您已经提到的,这只适用于情态动词。:/另外,我还有一个聊天室,可以随时看到。好主意。。至少我可以摆脱最让我恼火的鼠标移动听者。所以他们的行为似乎并不是我所错过的。。很遗憾。我注意到那里有两个翻滚活动。将其更改为正确的事件我现在通过滚动事件>>实现了它,但我没有设置变量,而是切换所有Starling视图顶部的Starling Blocker的可见性。谢谢