Запретить запуск события Touch из-под другого спрайта

Я пытаюсь сделать vieport, в котором вы можете панорамировать, перетаскивая фоновое изображение.

Вот что я сделал: http://students.info.uaic.ro/~tudor.berechet/0sandbox/aperture/science/testing/fatChance.html

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

Проблема в том, что событие, прикрепленное к фону, которое является событием касания, срабатывает, даже когда указатель мыши находится над спрайтом / фрагментом ролика (обезьяной или статистикой), который находится перед этим фоном. И статистики нет даже в gameLayer (где находятся обезьяна и курсоры мыши и bg). Попробуйте перетащить статистику и увидеть, что фон и все остальное перемещаются вместе с ней (это нежелательно). Кроме того, мне нужно удалить настраиваемый курсор и отображать обычный курсор всякий раз, когда мышь НЕ находится в фоновом режиме (т.е. когда она находится на обезьяне, статистике или любых новых спрайтах, которые у меня могут / будут в будущем).

Я давно не использовал flash, и я не эксперт в этом, но является ли это нормальным поведением для событий, которые запускаются независимо от того, находится ли их отправитель под другими вещами?

Как мне изменить это поведение?

PS: Я прикрепил исходный код к .swf по ссылке выше.

[РЕДАКТИРОВАТЬ] Также, если это имеет какое-либо отношение к чему-либо, я использую Starling для своего GameLayer.

[EDIT2] Похоже, я не очень ясно выразился. Я только хочу, чтобы сцену можно было перетаскивать, IFF мышь находится прямо на фоне. Всякий раз, когда между мышью и фоном есть спрайт, событие фона НЕ должно срабатывать, поэтому я могу изменить курсор и взаимодействовать с указанным спрайтом.


person Spectraljump    schedule 06.12.2011    source источник
comment
Я не могу найти источник?   -  person Lars Blåsjö    schedule 07.12.2011
comment
@Lars Щелкните правой кнопкой мыши ›Просмотреть исходный код или перейдите сюда: student.info.uaic.ro/~tudor.berechet/0sandbox/aperture/science/   -  person Spectraljump    schedule 07.12.2011
comment
Поскольку вы упомянули, что вы новичок во Flash, пробовали ли вы поиграть со свойствами mouseChildren и mouseEnabled своих фрагментов ролика / спрайтов?   -  person Frank    schedule 07.12.2011
comment
Сделайте monkey.mouseEnabled = false, как сказал Фрэнк +1.   -  person ToddBFisher    schedule 07.12.2011
comment
@Frank, ToddBFisher, я не хочу делать статистику или обезьяну невосприимчивой к событиям. Они сами будут интерактивными. mouseChildren, mouseEnabled или touchable просто делают спрайты не интерактивными. Зачем мне это нужно?   -  person Spectraljump    schedule 07.12.2011
comment
вы пробовали monkey.mouseChildren = false?   -  person Frank    schedule 07.12.2011
comment
@Frank, mouseChildren отключает интерактивность дочерних элементов цели. Ни у фона, ни у обезьяны нет детей или нет никаких родственных связей. Кроме того, похоже, что это свойство не реализовано внутри starling.display.Sprite;. (Но я пробовал это за пределами Старлинга.)   -  person Spectraljump    schedule 07.12.2011


Ответы (1)


Если вы хотите, чтобы события не проходили через обезьяну, вы можете использовать stopPropagation(). Поэтому добавьте (или обновите) прослушиватель событий к обезьяне и отредактируйте его так, чтобы e.stopPropagation() была первой строкой обработчика событий.

private function _touchHandler(e:TouchEvent):void
{
    e.stopPropagation();
    // any other code for touching your monkey :P ...
}

Сделайте то же самое для любых других событий, которые вы хотите остановить.

person kreek    schedule 07.12.2011
comment
Спасибо KreeK за упоминание stopPropagation(). Я был так глуп, что даже не подумал о слове «пропаганда»! :) На обезьяну работает нормально. Но для stats это действует странно. Курсор в виде руки (поддельный) все еще перемещается под stats, а указатель мыши не отображается. Однако, если вы перетащите stats, он потянется, не перетаскивая за собой фон (и рука останется позади). НО после перетаскивания фона повторное перетаскивание stats возобновит неправильные способы перетаскивания как самого себя, так и фона вместе с ним. Я обновил свою ссылку и источники. Stats находится в StarlingIntro.as. - person Spectraljump; 07.12.2011