Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AntLabel.autosize bag? #15

Open
Ogimle opened this issue Oct 8, 2013 · 11 comments
Open

AntLabel.autosize bag? #15

Ogimle opened this issue Oct 8, 2013 · 11 comments

Comments

@Ogimle
Copy link

Ogimle commented Oct 8, 2013

может я не так что делаю, но попробовал дать метке размер шрифта больший чем тот что по умолчанию и споткнулся об предел размера 11, больший размер начинает обрезаться, autosize по умолчанию true, принудительное выставление в true тоже результатов не дает.

для вывода используется встроенный в движок шрифт.

@AntKarlov
Copy link
Owner

Сейчас точно не скажу, но возможно следует при смене размера шрифта указывать lineHeight:

textField.lineHeight = textField.textHeight;

Только надо убедится, что textHeight возвращает именно максимальную высоту текстовых символов, а не высоту текстового блока, хотя высота текстового блока это height. В любом случае я постараюсь проверить эту проблему сегодня.

@Ogimle
Copy link
Author

Ogimle commented Oct 8, 2013

textField.lineHeight не существует

textField.height = textField.textHeight; результата не дало

@AntKarlov
Copy link
Owner

А можно посмотреть на скрин с проблемой? Я сейчас попробовал у себя задать размер шрифта при создании текстовой метки:

label = new AntLabel("system", 16);

И выглядит все как нужно: https://dl.dropboxusercontent.com/u/4367016/fontsize.png

@Ogimle
Copy link
Author

Ogimle commented Oct 8, 2013

cropfont

вот так выглядит шрифт размером 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;

}

@Ogimle
Copy link
Author

Ogimle commented Oct 8, 2013

да, точно, в конструкторе своего класса сделал

super("system", 16, 0xAAAAAA, true);

шрифт вывелся нормально, значит при реинициализации проблема.... вызвал в ините последовательно

calcFrame();
calcBounds();
updateBounds();
resetHelpers();

не помогло

@AntKarlov
Copy link
Owner

Попробуйте при реинициализации сделать следующим образом:

_textField.text = text = _txt; // Назначаем текстовому полю новый текст.
_textFormat.size = _size;
// .. другие настройки
_textField.setTextFormat(_textFormat);
calcFrame();

@AntKarlov
Copy link
Owner

Только что проверил: написал тестовый сеттер для 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: Кстати, хорошая идея сделать сеттеры и геттеры для размера шрифта и других его настроек :)

@Ogimle
Copy link
Author

Ogimle commented Oct 8, 2013

у меня чего-то не прокатывает... вот мой класс целиком

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);

текст появляется обрезанным

@AntKarlov
Copy link
Owner

Удалось повторить у себя проблему. Попробовал сделать пример и если написать метод 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, то проблема остается.

В общем ключевое решение проблемы — это принудительно задать размеру поля новый размер текста.

@Ogimle
Copy link
Author

Ogimle commented Oct 9, 2013

да, отлично работает, только чуть чуть подрезаются справа и снизу буквы, привабил припуск и все ок
height = _textField.height = _textField.textHeight + 4;
width = _textField.width = _textField.textWidth + 4;

@AntKarlov
Copy link
Owner

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

width = _textField.width = _textField.text.width + _textField.text.length;

Это конечно грубый пример так как не очень подходит для многострочных текстов, но суть, я думаю, ясна ;)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants