2009-04-11 1 views
1

У меня есть специальный класс холста, охватывающий всю мою сцену, и кучу горячих точек Sprite на нижнем слое. Если я помещаю горячие точки на том же слое, что и мой холст, холст не регистрирует события MOUSE_DOWN, если моя мышь находится внутри одной из горячих точек, поскольку вместо этого используются точки доступа. Однако, если я сохраняю горячие точки на нижнем уровне, холст обрабатывает все MouseEvents. Есть ли способ сделать MouseEvents более чем одной целью, так что и холст, и горячие точки реагируют на MouseEvents? (Холст - это класс рисования растрового изображения, и горячие точки должны срабатывать, когда курсор касается их или нажимает на них.)Проблема с Flash/Actionscript: может ли MouseEvents одновременно нацелиться на несколько объектов?

ответ

1

ActionScript имеет как пузырьки событий, так и захват событий. Это означает, что вы можете прослушивать события, начинающиеся с элементов или элементов для детей. Вам просто нужно создать правильный приемник событий. Захват начинает захватывать события в родительских элементах, когда он перемещается по цепочке дочерних элементов до тех пор, пока не достигнет элемента, в котором было инициировано событие. Событие bubbling начинает прослушивать события у ребенка и переходит к родительскому.

Третий аргумент addEventListener, useCapture, определяет, хотите ли вы пузыриться или захватывать.

Похоже, вы хотите пузыряться в событиях, поэтому вы хотите установить useCapture в false. Слушатели событий будут инициированы для ребенка и родителя.

Event Capturing and Bubbling

+0

Спасибо! Я немного поиграл с этим, но похоже, что он по-прежнему разрешает только одну цель на событие. Есть ли способ сделать MouseEvent целевой точкой доступа, запустить функцию, а затем перейти к следующему уровню? Если я начну рисовать по одной из горячих точек, холст чертежа не работает. – Archagon

+0

Цель - это элемент или объект, который был нажат. Есть только одна цель, и она доступна в объекте события. Похоже, вы все еще используете захват событий, а не пузырящийся. Если вы используете барботирование событий, он будет делать именно то, что вы хотите, в зависимости от контекста. –

+0

Ах! Понял. Я добавлял горячие точки в качестве детей сцены, а не холста. Спасибо! – Archagon

1

apphacker получил это право.

Там через две другие вещи, которые вы могли бы быть заинтересованы:

mouseChildren свойство и метод getObjectsUnderPoint()

удачи