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

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

В классе Неба:

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

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

10
задан phil 11 February 2010 в 22:47
поделиться

2 ответа

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

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

Разместите больше кода, и мы, вероятно, сможем больше помочь.

4
ответ дан 3 December 2019 в 14:43
поделиться

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

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

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

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

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

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

28
ответ дан 3 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: