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