Просмотр полной версии : как лучше сделать клик по кнопке ( любому другому клипу )
PrincessRoma
14.02.2014, 01:05
Увидел как друг пишет код для клика по кнопочкам -
он вешает EventListener на Stage, а потом слушает каждый клик, проверяя hitTestPoint-ом совпали ли координаты клика с определенным клипом на сцене, если да - то вызывает код соответствующей кнопки.
Я очень долго смеялся, т.к. для меня это чистая наркоманщина -
я вешаю EventListener-ы на сами клипы ( кнопки), ну и соответственно по клику вызываю нужную функцию для каждой кнопки.
Друг спорит и говорит, что его метод короче по кол-ву строк кода и удобнее. Я считаю, что это просто не логично.
Одним из контраргументов: если поверх такой кнопки отрисовать другой мувиклип или спрайт и произвести клик, то при совпадающих координатах hitTestPoint вернет true и код кнопки инициализируется, хотя это будет не нужно.
Друг в ответ сказал, что можно добавить код, который будет следить за тем, перекрывается ли кнопка другими компонентами ( что уже совсем костыль на мой взгляд).
Рассудите, пожалуйста. ))) Кто прав, и если прав я, то как донести суть. ))
Сделайте ему одну видимую кнопку на сцене и 100000000 за пределами сцены.
Akopalipsis
14.02.2014, 01:18
Сделайте ему одну видимую кнопку на сцене и 100000000 за пределами сцены.
Вы не его друг?
PrincessRoma
14.02.2014, 02:09
лол нет, это не он. )) Но я не понял мысли, можно поподробнее ? )
Akopalipsis
14.02.2014, 02:22
лол нет, это не он. )) Но я не понял мысли, можно поподробнее ? )
Просто я уточнил у Koopa, дающего сегодня просто сногсшибательные ответы, не Ваш ли он друг. Это с иронией.. А ответа на Ваш вопрос нет, можно делать всё и выбор зависит от меры помешательства на якобы совершенном коде. Чем универсальней код, тем он хуже и аргумент меньше кода, это как описание чувств одним словом. И лучший совет, который я много раз игнорировал, отказаться от универсальности и поверить в то, что идеального кода и подхода нет. Чем больше Вы будете погружаться в мир кода ГУРУ, тем больше будете убеждаться, что гениальное всегда просто.
JAVA стайл с одним обсервером-листенером?
HitTestPoint, как можно догадаться и без тестов, занимает больше процессорного времени, чем нативная реализация того же самого при определении мышиного события. Может быть и незначительно, но оптимизация складывается из мелочей.
Если Вашему другу так хочется реализовать механику с одним листенером, то пусть хранит ссылки на ДО (DisplayObject) и проверяет currentTarget с этими ссылками. Так он хотя бы сможет иметь возможность отписывать ДО от событий.
И да, как он сейчас отписывается от событий? Имеет тысячу флагов по одному на каждый ДО?
Akopalipsis
14.02.2014, 20:38
У меня схожий вопрос появился - все делают графику растровую, но Bitmap не ловит события мыши.
И в связи с этим вопрос - кто-нибудь пробовал использовать interactivePng для отказа от спрайтов и если да, то какие результаты? Или interactivePng это слишком грубо?
2 PrincessRoma
Два объекта (спрайта) на сцене - один перекрывает другой. Верхний спрайт прозрачный и нижний (пусть это будет кнопка) поэтому видим пользователем. Пользователь кликает по кнопке, которую видит. Получит ли кнопка событие клика при вашем подходе?
Akopalipsis
14.02.2014, 21:11
Korchy а зачем так делать? Должен же быть порядок с дисплей листе.
PrincessRoma
14.02.2014, 23:03
Korchy - если имеете в виду случай, когда я кидаю EventListener-ы на каждый объект, то конечно нет. В этом и суть. И присоединяюсь к ответу Akopalipsis-а: должен быть порядок.
При чем тут порядок? Два битмапа неправильной формы, оба реагируют на клик, лежат один над другим. Простейший пример - стопка элементов паззла. Кликая на прозрачной области верхнего, чтобы взять тот, что под ним лежит, при подходе, который предлагает PrincessRoma, клик все равно получит только верхний, хотя пользователь кликал на видимой части нижнего.
http://blog.psyrendust.com/2009/02/02/interactivepng-as3-class-to-handle-hit-areas-for-transparent-pngs/
Akopalipsis
15.02.2014, 13:54
Два битмапа неправильной формы, оба реагируют на клик, лежат один над другим.
Не подул о таком варианте. Но человек спрашивает конкретный вопрос, как ему лучше делать.
И отвечая о десяти миллионах кнопка за пределами сцены и пазле, могут изменить его сознание так, что он все события мыши заменит на hitTest.
И отвечая о десяти миллионах кнопка за пределами сцены и пазле, могут изменить его сознание
Понятно, что все нужно в меру и в зависимости от задачи.
PrincessRoma
15.02.2014, 19:06
Поясняю - нужно корректно использовать определения. Я понял вас, Korchy, таким образом, что под "прозрачностью" вы понимаете свойство alpha, которое установлено в 0.0 или там 0.1, словом - высокая прозрачность. По такой "прозрачной" области клик воспринимается, естественно.
Как там клик на прозрачную область битмапа воспринимается - не знаю(скорее всего так же кстати, т.е. кликается), с растром во флеше не работал, я говорю лишь о векторных фигурах ( любых сложных форм).
Как решение кстати для такой задачки приходит в голову рисовать фигурку паззла вектором и использовать BitmapFill ( не знаю прокатит ли, но вдруг)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.