![]() |
Изменение радиуса компонента без его перемещения
Вопрос по Flex компоненту, но в основном касается as3 геометрии, поэтому считаю здесь более правильный раздел.
Вот это RichText компонент, который позволяет размещать текст вдоль окружности (по ссылке и сорсы есть). Главная проблема в том, что изменяя радиус, сам текст тоже перемещается (попробуйте, менять первый слайдер), а нужно чтобы он выгибался оставаясь на одном и том же месте. За положение текста отвечает этот код: Код AS3:
Вторая проблема, это переход от положительного радиуса к отрицательному. То есть текст должен уметь выгибаться из горизонтального положения как вверх, так и вниз. Делаем слайдер в котором движок посредине (minimum="-20" maximum="20" value="0" stepSize="1"). Теперь нужно как-то смещать центр радиуса окружности вокруг которой строится текст в зависимости от значений слайдера. По коду эта окружность никак не объявляется. Ну и получается, что для горизонтального текста (value слайдера = 0) радиус должен быть бесконечно большим. Как это реализовать тоже без понятия. Сейчас при нуле все буквы текста собираются в одну точку. Слайдер двигается дискретно, поэтому нужно как-то изменить условия, чтобы просто убрать размещение вдоль окружности при value="0", а при value="1" или value="-1" уже менять центр радиуса окружности на какое-то большое значение (текст слегка искривлен). Извиняюсь за сумбурность, сложно все это пояснить, но, надеюсь, понять меня можно. |
1. Нужно вводить спейсинг, расстояние между буквами.
При уменьшении радиуса увеличивается длина дуги, а значит и длина строки символов, если первый и последний должны оставаться на месте. Расстояние между буквами должно увеличиваться. Им управляет угол каждого символа — arcAngle. Сейчас он заточен на сохранение расстояния между буквами при изменении радиуса, поэтому конец строки плавает. Нужно: посчитать длину дуги (строки) для текущего радиуса, между нужными координатами первого и последнего символа. Разделить ее на длину неизогнутой строки и получить коэфициент приращения спейсинга, на который домножать arcAngle. 2. Бесконечно большой — это глобальная константа Infinity. При смещении регулятора на 1 пиксель можно считать радиус за Number.MAX_VALUE (1.79769313486231e+308). Это уже число, с которым можно работать дальше, делить, отнимать и т.д. |
| Часовой пояс GMT +4, время: 02:15. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.