Альтернативы для регистрации событий на сцене в AS3? - PullRequest
0 голосов
/ 01 февраля 2010

Я программирую небольшой программный прототип как приложение Flash / Actionscript3. В настоящее время я зарегистрировал некоторые события на сцене - но это громоздко, так как необходимо постоянно использовать stopPropoagation ().

как пример: У меня есть элемент, показанный с помощью мыши, и событие для закрытия меню на сцене. Без использования stopPropagation, меню открывается и закрывается снова немедленно. Функция скрытия зарегистрирована на некоторых объектах, поэтому, к сожалению, просто проверяет, не выполнится ли target = stage.

Есть ли хорошие решения, чтобы обойти это?

Ответы [ 2 ]

0 голосов
/ 02 февраля 2010

Итак, у вас есть слушатель MOUSE_CLICK на сцене, который срабатывает, когда вы нажимаете «элемент».

Что выглядит примерно так:

addEventListener(MouseEvent.CLICK, onClick)
function onClick(e:MouseEvent)
{
    trace("CLICK")
}
mc.addEventListener(MouseEvent.CLICK, onMcClick)

function onMcClick(e:MouseEvent)
{
    trace("mc")
    e.stopPropagation();
}

Если это так, то да, сцена всегда получит это событие, так как оно имеет отношение к тому, как собственные флэш-события распространяются и всплывают. http://www.adobe.com/devnet/actionscript/articles/event_handling_as3_03.html

Вместо того, чтобы слушать сцену и вызывать stopPropogation, вы можете реструктурировать свой код. Вам нужно будет удалить слушателя на сцене и вместо этого добавить его к реальному предмету так:

mc2.addEventListener(MouseEvent.CLICK, onClick)

function onClick(e:MouseEvent)
{
    trace("CLICK")
}


mc.addEventListener(MouseEvent.CLICK, onMcClick)

function onMcClick(e:MouseEvent)
{
    trace("MC 2 CLICK")

}

Конечно, для этого может потребоваться изменить какой-то другой код, но, поскольку я его не вижу, я не уверен, что это такое. Просто помните, что события распространяются и всплывают. Так что, если у вас есть мувиклип 'c' внутри мувиклипа 'b', который находится на сцене, и у c и b есть слушатели для MOUSE_CLICK, то если вы нажмете на c, то и события b, и c получат это событие, так как оно всплывает показать список. Но если бы c не был в b, а c был на сцене, а b был на сцене, то этого бы не произошло, поскольку b не находится на пути к пузырению c. Надеюсь, это поможет:)

0 голосов
/ 01 февраля 2010

1 решение состоит в том, чтобы проверить stage.focus, то есть если при открытии меню фокус находится на нем, вы можете добавить прослушиватель события фокуса, чтобы при щелчке по сцене и потере фокуса меню оно закрывалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...