As3 mouseEnabled все еще проблема для меня

Через пару лет, все еще есть что-то о mouseEnabled, которого я не получаю. У меня есть Sprite (например, здесь "Небо", которое содержит много объектов, одним из которых является облако, которое я не хочу получать Mouse Events. Я накладываю это небо на некоторые другие экранные объекты. Я хочу, чтобы облако было видимый, но не блокировать события мыши. Если вы видите дерево через облака, вы можете щелкнуть по дереву.

В классе Sky:

mouseEnabled = false;
cloud.mouseEnabled = false;
cloud.mouseChildren = false;

Даже при такой конфигурации, когда облако над деревом, я не могу щелкнуть по дереву, потому что облако блокирует его. Почему???

Ответ 1

Несмотря на то, что у Sky установлено значение mouseEnabled/mouseChildren для false, оно все еще является объектом, оно по-прежнему занимает пробел и поэтому продолжает действовать как область попадания для любых контейнеров PARENT, у которых нет mouseEnabled/mouseChildren, которые установлены на false,

Поэтому я подозреваю, что ваш объект Sky находится не в том же родительском контейнере, что и ваш объект Tree. Возможно, у вашего объекта Sky есть свой родительский объект-контейнер, который является виновником, перехватывающим события.

Чтобы разработать: Любой объект, содержащий ALLY, будет иметь зону хита и будет перехватывать щелчки мыши, даже если все отдельные вещи, которые он содержит (фигуры, дочерние объекты и т.д.), могут иметь значение mouseEnabled/mouseChildren равным false.

Итак, хотя ваш объект Sky имеет значение mouseEnabled равным false, ваше небо (и его дети) по-прежнему занимают свободное место и, следовательно, все еще предоставляют контейнеру с родителями Sky - область попадания для перехвата событий мыши.

Таким образом, ваше решение должно убедиться, что все родительские контейнеры Sky имеют свойство mouseEnabled равным false, по крайней мере, до (но не включая) первого общего контейнера-предка объектов Tree и Sky.

Кроме того, установив mouseEnabled = false и оставив mouseChildren = true, вы можете иметь контейнер, в котором только выбрать детей с mouseEnabled = true получать события click click:)

Ответ 2

Ты говоришь там "много объектов"? Скорее всего, что-то еще блокирует его. Я рекомендую добавить слушателя на сцену, а затем вы можете увидеть, какой объект получает клики:

import flash.utils.getQualifiedClassName;
stage.addEventListener(MouseEvent.CLICK, onClick);
private function onClick(event:MouseEvent):void
{
    trace(event.target.name, getQualifiedClassName(event.target));
}

Опубликуйте больше кода, и мы, вероятно, можем больше помочь.