![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 44
|
Здравствуйте.
Необходимо сделать некий компонент, который поддерживает рисование в нем прямоугольников их перемещение и изменение размеров. Все с помощью мыши. Несмотря на то, что задача довольно простая - у меня возникли с ней некоторые трудности. Я год не разрабатывал на флексе, поэтому первым делом появилась такая идея: иметь некий контейнер фиксированного размера; иметь некий компонент, который будет отвечать за отрисовку прямоугольников их перемещение и изменение размеров, будет помещаться в описанный ранее контейнер и занимать всю его высоту и ширину. В компоненте-прямоугольнике я хотел в mxml описать собственно сам прямоугольник и 4 квадрата по бокам, которые будут выполнять роль рамки для ресайзинга, как-то по-хитрому забайндить их координаты и размеры между собой и применить стандартный механизм пермещения - startDrag/stopDrag. Тут же всплыл первый подводный камень - во время перетаскивания координаты объекта не меняются (ведь создается временный объект) и соответственно координаты и размерности прямоугольника не обновляются. Хорошо. Я написал свою обработку событий мыши в компоненте-прямоугольнике. Сейчас имеется различие нажатий на рамку, прямоугольник, перемещение, ресайзинг и т.п. Но, всплыл другой "косяк" - компонент-прмоугольник занимает всю ширину/высоту контейнера, в то время как сам прямоугольник внтри него мал. Т.е. у меня огромная прозрачная зона, которая либо перехватывает все события от мыши, либо нет. В первом случае из всех компонентов-прямоугольников из контейнера я могу работать только с одним ("верхним"). Во втором при захвате и перемещении рамки или границы курсор часто выходит за пределы отрисованной зоны и попадает в зону прозрачности, которая событий от мыши не получает и соотвественно происходят застревания. Как лучше всего решить поставленную задачу? Могу предоставить код, который я уже написал. |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Вот тут drag, которого не глючит от выхода мышки за пределы. Но Вам нужно на flex... по этому мой пример может и не поможет..
|
|
|||||
|
Регистрация: Apr 2012
Сообщений: 44
|
Вроде как я сделал то, что хотел. Но есть 1 нюанс. Я изменяю компонентам ширину, высоту и позицию динамически, когда получаю mouseMove. Это приводит к тому, что компоненты моргают при перерисовке, остаются видны старые позиции на некоторое время и т.п. Как можно этого избежать?
|
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Сгладить мерцание, поможет -
а если не поможет, то это, скорее всего, из-за не округлённых координат. И я не знаю как с этим бороться. Цитата:
Добавлено через 12 минут Цитата:
который у Вас за это отвечает. А то немного не представляется, как у Вас там всё ![]() |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 44
|
Предложенное вами решение сделало отрисовку гораздо плавнее, но проблемы с мерцанием остались.
Прикладываю исходники. Там всего 2 компонента. |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Sonet Вам придётся ждать тех, кто понимает flex, я если честно даже запустить не могу. Да и как решить проблему с мерцанием я тоже не знаю, ещё не дошел до этого.
На сколько я знаю, мерцать может из-за не округлённых координат, то есть, координата object.x = 3.0015, а не object.x=3. И вот флеш плеер плохо рисует по расчётам таких координат. Решается вроде маленьким blur'ом, размытием, но возможно есть какие то более простые решения. У bitmap есть вроде - сглаживание. |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 44
|
Akopalipsis
Попробовал округлять координаты перед высталвением - не помогло. Значит подожду) |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 44
|
Вот swf.
|
|
|||||
|
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
скорее всего продлема в точке регистрации, когда вы задаете
так как точка регистрации находится по центру, то и прямоугольник будет растянут в две стороны.
попробуйте поменять местами строки вот так: почему бы не отрисовывать прямоугольники через графикс? |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 44
|
Цитата:
Потому что мне удобнее иметь его как отдельный компонент-контейнер, т.к. я планировал помещать в него текстовые поля или изображения. Хотя как обходной путья держу этот вариант при себе. |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:12. |
|
|
« Предыдущая тема | Следующая тема » |
|
|