![]() |
Всплывающая подсказка
Друзья, возник ещё один вопрос. Добавляю на сцену иконку, в классе которой предусмотрен TextField для всплывающей подсказки, которая появляется рядом при наведении мыши. Проблема в том, что если поблизости имеются другие компоненты, добавленные позже, то подсказка автоматически оказывается на более низкой глубине и частично перекрывается этими компонентами. Как сделать, чтобы всегда оказывалась поверх остальных?
|
Appleman добавь контейнер выше остальных и туда добавляй подсказку. Я бы вообще вынес подсказку в отдельный класс, ибо нечего ей делать в классе иконки
|
Цитата:
|
Цитата:
Цитата:
|
а как же мантра что stage приложению не принадлежит и лежать там должен только главный контейнер - root?
|
Эта страсть неистребима, засорять стейдж разными выкидышами. Вот вроде ничего не мешает иметь специальный слой поверх всего прямо в главном Вью, никаких проблем СРАЗУ разделить все отображение по слоям, чтобы HUD был всегда поверх мира, слой для главных Меню — поверх HUDа, а подсказки поверх всего (кроме, может быть, слоя с экраном для видеозаставок). Но нет, проще выплюнуть что-нибудь на стейдж.
Статический класс для подсказок хорош тем, что предоставляет один ларек для обращений, или точку входа, или как там. Правда, всем непонятным элементам придется его импортить, чтоб зарегистрироваться, но если их не катастрофически много, то почему бы и нет (а если много, то явно интерфейс требует пересмотра — игрок не должен сидеть и в задумчивости наводить мыша на каждый объект на экране, вытаясь понять что это с помощью подсказок). Если в хинте (тултипе, сорри) раскрывается дополнительная информация (не ЧТО, а ПОЧЕМУ например), то другое дело.. Но тогда надо сначала продумать механику — будет ли элемент сообщать Менеджеру подсказок только текст подсказки, или будет передавать готовый ДисплейОбжект с картинками, шкалами и графиками, который соберет сам. А в остальном обычно делают так: элемент, который хочет рассказа о себе, регистрируется у Менеджера через статик метод register(), в который передает ссылку на себя и текст/готовый хинт, и может быть политику по размещению хинта (типа "сверху по центру, не двигать за мышкой"). Менеджер оформляет подписку на маусОвер/маусМув/маусАут для этого объекта и сохраняет текст/ДО и политику например в Dictionary. Когда с объектом случится запланированный наезд мышой, Менеджер закидывает его хинт в специальный высоколежащий слой для подсказок, а когда надо — вынимает его оттуда. Менеджер также должен предоставить метод unregister(), который объект вызовет перед смертью в своем методе destroy(). |
Цитата:
|
Цитата:
Цитата:
На счёт импортить и регистрироваться, я тоже думал об этом, но пришёл к тому, что правильнее всё-таки обращаться к подобному "статическому" классу, который предоставит объект "под ключ", чем каждый раз по отдельности ломиться за иконкой в один класс, за полем для подсказки - в другой, и за текстом - в третий. Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Кейс:флэшка грузится внутрь контейнера и владелец контейнера добавляет оверлей поверх флэшки и тут начинают выскакивать "выкидыши" поверх оверлея и вообще всего на свете. |
Цитата:
У меня вообще система работает так (тут немного урезанный вариант): 1) Все объекты, у которых может быть подсказка применяют интерфейс ITooltip, в котором есть геттер / сеттер для поля hintText и localToGlobal(point:Point):Point вот так: Код AS3:
ROLL_OVER, ROLL_OUT 3) Дальше в обработчике ROLL_OVER проверяет что это за объект Код AS3:
Код AS3:
6) Профит Не знаю как там у тебя что показывается поверх оверлеев. С этой системой такое в принципе невозможно. Когда я ещё писал на флеше, эта либа у меня успешно кочевала из проекта в проект и никогда не глючила п.с. Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
А то можно сказать, а если бы владелец контейнера удалил твой контейнер, то твоя игра вообще не работала бы. Цитата:
Я бы сказал так, приложение, в котором что-то там со стороны загружается и добавляется, без учета логики родительского приложения - это и есть костыль. |
Цитата:
Цитата:
Добавлено через 7 минут Любой кейс, где твоя схема не работает - это "если бы да кабы".Тогда, конечно,спорить не о чем Добавлено через 16 минут Цитата:
Добавлено через 26 минут более того,это еще и вынуждает родителя тоже гадить на stage т.к. это единственный способ перекрыть всё) |
Цитата:
При правильном же подходе к разработке игры / приложения, тултипы будут отлично появляться там, где и должны. Они должны быть всегда поверх всех контейнеров. Не должна никакая флешка никаких попапов рисовать поверх тултипа. Он должен быть всегда сверху. Это такой негласный закон тултипов. Если ты мне приведешь какой-то вменяемый пример ситсемы или приложения, где это не так, я с удовольствием на это погляжу. Цитата:
Цитата:
Цитата:
|
Кость, смотри есть 2 случая:
1)Работает всегда с оговорками 2)Работает всегда без оговорок. Давай на этом закончим пусть тс сам выбирает. При грамотной архитектуре переделать (1) в (2) можно в одну строку.Я в свое время это сделал заменой этого Код AS3:
Код AS3:
Цитата:
|
Цитата:
Ставим его на паузу, при необходимости, и тултип не появляется пока не снимем с паузы. Если допустить, что есть какая-то родительская флешка, в которой этот тултип может что-то там перекрывать, то она может просто временно отключить тултип. В любом случае и при твоем варианте у нее должен быть механизм отключения их, пусть даже блокировкой контейнера с тултипами, но должен быть. Так что код постановки на паузу этой системы легко можно реализовать. Я считаю, что использование stage в качестве контейнера, как раз в случае с тултипами вполне оправдано и нормально. Тултипы не имеют жесткой привязки ни к чему и в любом случае сами удаляются из родителя. Плюс такой подход дает большую автономию тултипа. Он уже не зависит от наличия какого-то дополнительного контейнера, который, в данном случае, просто избыточен. |
Цитата:
Цитата:
|
Цитата:
Цитата:
Добавлено через 6 минут Цитата:
|
Цитата:
|
Wolsh, по-моему, у тебя нить обсуждения потерялась. Вот, смотри твой первый комментарий, а затем наши поочерёдные реплики.
Цитата:
Цитата:
И ещё просьба на счёт вью пояснить - это мой первый вопрос был из предыдущего сообщения. Я его ещё короче сформулирую. Правильно ли создавать отдельные "главные" вью или должен быть один главный "командир", который просто в зависимости от текущей ситуации будет выводить разные дочерние компоненты? |
Цитата:
"Но тогда надо сначала продумать механику — будет ли элемент сообщать Менеджеру подсказок только текст подсказки, или будет передавать готовый ДисплейОбжект с картинками, шкалами и графиками, который соберет сам." Цитата:
|
Всё, теперь понял, что имеется в виду. Вопрос снят, спасибо.
|
// разговоры про синглтон уехали в тему про синглтон
|
| Часовой пояс GMT +4, время: 14:22. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.