3

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

我有一件事困扰我:如果在 displayList-elements 上生成 MouseEvents,它们总是会通过八哥层并产生 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用于翻转行为>>翻转外观将不会被删除如果您将鼠标悬停在显示列表元素上,则来自八哥。

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

一个提示将不胜感激。谢谢。

4

1 回答 1

1

您可以在显示列表(不是舞台)中创建 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;
}
于 2013-06-25T10:29:23.300 回答