Open Ogimle opened 11 years ago
Сейчас точно не скажу, но возможно следует при смене размера шрифта указывать lineHeight:
textField.lineHeight = textField.textHeight;
Только надо убедится, что textHeight возвращает именно максимальную высоту текстовых символов, а не высоту текстового блока, хотя высота текстового блока это height. В любом случае я постараюсь проверить эту проблему сегодня.
textField.lineHeight не существует
textField.height = textField.textHeight; результата не дало
А можно посмотреть на скрин с проблемой? Я сейчас попробовал у себя задать размер шрифта при создании текстовой метки:
label = new AntLabel("system", 16);
И выглядит все как нужно: https://dl.dropboxusercontent.com/u/4367016/fontsize.png
вот так выглядит шрифт размером 16
я создал класс наследник метки, выступает как актер, воссоздается на сцене с помощью recycle, реинициализируется
public function init(_txt:String, _x:int, _y:int, _color:uint=0xAAAAAA, _size:int=16, _font:String="system"):void { text = _txt;
_textFormat.font = _font;
_textFormat.size = _size;
_textFormat.color = _color;
_textField.setTextFormat(_textFormat);
x = _x;
y = _y;
}
да, точно, в конструкторе своего класса сделал
super("system", 16, 0xAAAAAA, true);
шрифт вывелся нормально, значит при реинициализации проблема.... вызвал в ините последовательно
calcFrame(); calcBounds(); updateBounds(); resetHelpers();
не помогло
Попробуйте при реинициализации сделать следующим образом:
_textField.text = text = _txt; // Назначаем текстовому полю новый текст.
_textFormat.size = _size;
// .. другие настройки
_textField.setTextFormat(_textFormat);
calcFrame();
Только что проверил: написал тестовый сеттер для AntLabel:
public function set size(aValue:int):void
{
_textFormat.size = aValue;
_textField.setTextFormat(_textFormat);
calcFrame();
}
Далее создал текстовую метку:
_testLabel = new AntLabel("system");
_testLabel.reset(10, 10);
_testLabel.beginChange();
_testLabel.text += "line 1\n";
_testLabel.text += "line 2 \n";
_testLabel.text += "line 3\n";
_testLabel.text += "line 4\n";
_testLabel.endChange();
add(_testLabel);
_testLabel.size = 16;
И все отображается так же как на скрине выше.
PS: Кстати, хорошая идея сделать сеттеры и геттеры для размера шрифта и других его настроек :)
у меня чего-то не прокатывает... вот мой класс целиком
public class FlyText extends AntLabel
{
private var speed:int = 200;
public function FlyText()
{
super("system");
}
public function init(_txt:String, _x:int, _y:int, _color:uint=0xAAAAAA, _size:int=16, _font:String="system"):void
{
alpha = 1;
_textField.text = text = _txt;
_textFormat.font = _font;
_textFormat.size = _size;
_textFormat.color = _color;
_textField.setTextFormat(_textFormat);
calcFrame();
x = _x;
y = _y;
}
override public function update():void
{
super.update();
alpha -= AntG.elapsed;
x += speed * AntG.elapsed/20;
y -= speed * AntG.elapsed/2;
if (alpha == 0)
{
kill();
}
}
}
вот тестовый вызов
var ft:FlyText = new FlyText(); ft.init("test", 300, 300); add(ft);
текст появляется обрезанным
Удалось повторить у себя проблему. Попробовал сделать пример и если написать метод init()
следующим образом, то все работает хорошо:
public function init(_txt:String, _x:int, _y:int, _color:uint = 0xAAAAAA, _size:int = 16, _font:String = "system"):void
{
text = _txt;
_textFormat.font = _font;
_textFormat.color = _color;
_textFormat.size = _size;
_textField.setTextFormat(_textFormat);
height = _textField.height = _textField.textHeight;
width = _textField.width = _textField.textWidth;
resetHelpers();
calcFrame();
reset(aX, aY);
}
Если честно, то я пока так и не понял в какой момент происходит сбой размеров. Ведь когда я написал свой set size()
для установки размеров шрифта, то размеры текстового поля не страдали. Возможно что проблема возникает именно в момент смены текста, но если указывать текст напрямую через _textField.text = _txt
, то проблема остается.
В общем ключевое решение проблемы — это принудительно задать размеру поля новый размер текста.
да, отлично работает, только чуть чуть подрезаются справа и снизу буквы, привабил припуск и все ок height = _textField.height = _textField.textHeight + 4; width = _textField.width = _textField.textWidth + 4;
Да, такой сдвиг существует, сталкивался с ним и ранее когда работал с TextField. Насколько я помню смещение зависит от количества символов в строке, поэтому лучше добавлять к ширине в зависимости от длины строки:
width = _textField.width = _textField.text.width + _textField.text.length;
Это конечно грубый пример так как не очень подходит для многострочных текстов, но суть, я думаю, ясна ;)
может я не так что делаю, но попробовал дать метке размер шрифта больший чем тот что по умолчанию и споткнулся об предел размера 11, больший размер начинает обрезаться, autosize по умолчанию true, принудительное выставление в true тоже результатов не дает.
для вывода используется встроенный в движок шрифт.