我正在创建一个游戏,它使用starling层(游戏本身)和经典显示列表,其中包含几个弹出式窗口和类似的东西。
有一件事让我很困扰:如果MouseEvents是在displayList元素上生成的,它们总是会穿过starling层并生成TouchEvents等,这非常烦人。
我想知道是否有一些通用的(且易于使用的)方法来处理这个问题。
一种可能是监听所有displayList-Elements以获取以下事件:
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();
}但对我来说这看起来很糟糕。即使我这样做了,我还有一个问题:如果starling-element在那个display-list-element下面,并且如果它有一个用于翻转行为>>的TouchEvent.TOUCH,那么如果您将鼠标悬停在display-list-element上,翻转外观将不会从starling中删除。
我还考虑在每个display-list-element后面放一个dummy-starling元素,...为了停止这些事件..但是,对于这样一个“简单”的任务来说,这一切听起来都有点“过于复杂”。还是我错过了什么?
如果您能给我一个提示,我们将不胜感激。谢谢。
发布于 2013-06-25 18:29:23
您可以在显示列表(而不是舞台)中创建一个主容器,并侦听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;
}https://stackoverflow.com/questions/17294339
复制相似问题