Предотвратить событие Touch от стрельбы из-под другого спрайта - PullRequest
0 голосов
/ 07 декабря 2011

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

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

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

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

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

Как бы я изменил это поведение?

PS: я подключил источник к .swf по ссылке выше.

[EDIT] Кроме того, на случай, если это как-то связано, я использую Starling для моего GameLayer.

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

1 Ответ

2 голосов
/ 07 декабря 2011

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

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

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

...