Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Баг в текстовом поле (http://www.flasher.ru/forum/showthread.php?t=202376)

Hamid 12.07.2013 13:50

Баг в текстовом поле
 
Всем привет, объясните мне пожалуйста почему так происходит, пока мой мозг не улетел в космос!

Просто запустите код и посмотрите что печатает, а печатает вот что:
test 0 = (x=0, y=-107374182.4, w=11, h=0)
test 1 = (x=2, y=2, w=11, h=15)

Код AS3:

            var tmpText:TextField = new TextField();
            tmpText.width = 0; //Or tmpText.height = 0;
            tmpText.autoSize = TextFieldAutoSize.LEFT;
            tmpText.htmlText = 'What the hell?';
            trace('test 0 = ' + tmpText.getCharBoundaries(0));
            tmpText.x;
            trace('test 1 = ' + tmpText.getCharBoundaries(0));


AlexLucas 12.07.2013 14:31

Наверное тот кто написал TextField :)
И в следующий раз называйте нормально тему, случай интересный, а тему наверное закроют за неподобающее название.

caseyryan 12.07.2013 14:41

А что тут объяснять-то? По-моему все очевидно.
Текстфилд создается, у него есть определенные свойства по умолчанию. Далее при вызове геттера Х положения всего, входящего в текст филд обновляется. Он понимает, что появился текст и пересчитывает положения и размеры. И не важно присваивается значение Х переменной или геттер просто вызывается

Hamid 12.07.2013 15:44

Цитата:

Сообщение от AlexLucas (Сообщение 1140864)
Наверное тот кто написал TextField :)
И в следующий раз называйте нормально тему, случай интересный, а тему наверное закроют за неподобающее название.

Да, с названием темы погорячился:) Этот баг просто мозг мне вынес.

AlexLucas 12.07.2013 15:45

Если убрать autosize ничего не обновится.
Если задать текстовому полю большую ширину (в случае этого текста это более 4 пикселей), а потом опять сжать его до 0 задаются те же странные значения, видимо где-то пытается экономить т.к. буквы сжимаются до нулевой высоты.
Так что это не по умолчанию, а высчитывается криво наверное. И autosize этому как-то мешает.
Нормально на всё ответить могут только разработчики.
И зачем в геттере-то всё пересчитывать ?

Hamid 12.07.2013 16:17

Цитата:

Сообщение от caseyryan (Сообщение 1140867)
А что тут объяснять-то? По-моему все очевидно.
Текстфилд создается, у него есть определенные свойства по умолчанию. Далее при вызове геттера Х положения всего, входящего в текст филд обновляется. Он понимает, что появился текст и пересчитывает положения и размеры. И не важно присваивается значение Х переменной или геттер просто вызывается

Да мне тоже так показалось, причем метод get x,y. Заметил еще один баг! Когда выравнивание текста делаю по центру и узнаю координаты одного из символов, то возвращает не правильно, как будто текст еще не выровнялся по центру! Как с этим быть? Может кто такое замечал?

Добавлено через 9 минут
Нашел ошибку! Но не ту про которую пишу в теме, а еще одну getCharBoundaries не правильно работает. По идее он возвращает прямоугольник относительно начала координат текста, но если применить autosize, то криво считает. Допустим у нас текст "тесТ", ищем прямоугольник последней буквы "Т", предположим, что буквы шириной по 10 пикселей, тогда координата последней буквы по х = 30, это так если
Код AS3:

autosize = TextFieldAutoSize.LEFT

Но если сделать
Код AS3:

autosize = TextFieldAutoSize.CENTER

, то он текст перемещается в координаты -20 по х, ну логично, зато теперь х последней буквы не 30, а 10. Т.е. он считает не относительно текста, а х(буквы "Т") = х(относительно начала текст) - х(смещение тектса) и для
Код AS3:

autosize = TextFieldAutoSize.CENTER

то же правило.

И немного вопрос не по теме: форум только у меня раз через 10ый раз грузится или у всех? вроде другие сайты норм.

Добавлено через 13 минут
Цитата:

Сообщение от AlexLucas (Сообщение 1140883)
Если убрать autosize ничего не обновится.
Если задать текстовому полю большую ширину (в случае этого текста это более 4 пикселей), а потом опять сжать его до 0 задаются те же странные значения, видимо где-то пытается экономить т.к. буквы сжимаются до нулевой высоты.
Так что это не по умолчанию, а высчитывается криво наверное. И autosize этому как-то мешает.
Нормально на всё ответить могут только разработчики.
И зачем в геттере-то всё пересчитывать ?

"Если убрать autosize ничего не обновится." - это правильно, ибо если нет автовыравнивания, то зачем размеры менять какие заданы, те и остаются. "И autosize этому как-то мешает." - да у метода getCharBoundaries крышу сносит, когда у текста нет размера, видимо проверку забыли поставить, НО я то после задания авторазмера и текст задаю, а он не обновляет размер при этом что ли? По гет методу согласен, это более чем странно.

AlexCooper 12.07.2013 19:56

почему не использовать обычный
Код AS3:

textField.textWidth
textField.textHeight

?


Часовой пояс GMT +4, время: 10:39.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.