Внедрение жирного шрифта as3

#actionscript-3 #actionscript #flash-builder

#actionscript-3 #actionscript #flash-конструктор

Вопрос:

У меня возникли проблемы с встраиванием шрифта как жирного с использованием FB4. Для этого я использую поля TextLayout и TextLayoutFormat, и мой код выглядит следующим образом:

 package
{
import flash.display.Sprite;
import flash.text.AntiAliasType;
import flash.text.Font;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
import flash.text.engine.FontLookup;

import flashx.textLayout.container.ContainerController;
import flashx.textLayout.elements.ParagraphElement;
import flashx.textLayout.elements.SpanElement;
import flashx.textLayout.elements.TextFlow;
import flashx.textLayout.formats.TextLayoutFormat;

public class FontEmbedding extends Sprite
{
    [Embed(source='TAHOMA.ttf', fontName='Tahoma', embedAsCFF="true")]
    private var _fontTahoma:Class;
    private const TAHOMA:String = "Tahoma";

    [Embed(source='TAHOMA.ttf', fontWeight = FontWeight.BOLD, fontName='Tahoma Bold', embedAsCFF="true")]
    private var _fontTahomBold:Class;
    private const TAHOMA_BOLD:String = "Tahoma Bold";

    public function FontEmbedding()
    {           
        this.textLayout();
    }

    private function textLayout():void
    {
        var textLayoutFormat:TextLayoutFormat = new TextLayoutFormat();
        textLayoutFormat.fontLookup = FontLookup.EMBEDDED_CFF;
        textLayoutFormat.fontFamily = TAHOMA_BOLD;
        textLayoutFormat.fontSize = 32;

        var textFlow:TextFlow = new TextFlow();
        var paragraphElement:ParagraphElement = new ParagraphElement();
        textFlow.addChild(paragraphElement);

        var span:SpanElement = new SpanElement();
        span.text = "This is an example";
        paragraphElement.addChild(span);

        textFlow.format = textLayoutFormat;

        var containerController:ContainerController = new     ContainerController(this, 400, 100);
        textFlow.flowComposer.addController(containerController);
        textFlow.flowComposer.updateAllControllers();
    }
}
}
  

Шрифт отображается как обычный, а 'fontWeight' свойство игнорируется. Любые идеи будут с благодарностью приняты?

Комментарии:

1. Разве это не называется FontFamily=»Tahoma» ??

2. Просто предположение, но это имя файла ‘GillSansforJL-Light’ будет указывать на набор символов, которые для меня не выделены жирным шрифтом. Как выглядит ttf в приложении предварительного просмотра?

3. Это может помочь вам в отладке. Он покажет шрифты, которые вы внедрили. var embeddedFonts:Array = Font.enumerateFonts(false); embeddedFonts.sortOn(«FontName», массив. ЧУВСТВИТЕЛЕН К РЕГИСТРУ); трассировка(«Встроенные шрифты:»); for (var i:int = 0; i < Встроенные шрифты. длина; i ) { трассировка(«FontName: » (Встроенные шрифты [i] как шрифт).FontName «, FontStyle: » (Встроенные шрифты [i] как шрифт).FontStyle); }

4. @Hawks это всего лишь пример, но в моем реальном приложении мне нужно будет сделать стандартный шрифт Tahoma жирным шрифтом из папки Windows / Font, разве это невозможно? Шрифты с жирным шрифтом отображаются после реализации кода Треворса, поэтому я не уверен, почему он не отображается как жирный?

Ответ №1:

Этот код работал для меня, со строкой textLayoutFormat.fontWeight = FontWeight.BOLD; или нет.

 package
{
    import flash.display.Sprite;
    import flash.text.AntiAliasType;
    import flash.text.Font;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;
    import flash.text.engine.FontLookup;
    import flash.text.engine.FontWeight;

    import flashx.textLayout.container.ContainerController;
    import flashx.textLayout.elements.ParagraphElement;
    import flashx.textLayout.elements.SpanElement;
    import flashx.textLayout.elements.TextFlow;
    import flashx.textLayout.formats.TextLayoutFormat;

    public class FontEmbedding extends Sprite
    {
        [Embed(source='ChaparralPro-Bold.otf', fontWeight = FontWeight.BOLD, fontName='ChaparralPro-Bold', embedAsCFF="true")]
        private var _fontGillSans:Class;
        private const FONT_CHAP:String = "ChaparralPro-Bold";

        public function FontEmbedding()
        {           
            this.textLayout();
        }

        private function textLayout():void
        {
            var textLayoutFormat:TextLayoutFormat = new TextLayoutFormat();
            textLayoutFormat.fontLookup = FontLookup.EMBEDDED_CFF;
            textLayoutFormat.fontFamily = FONT_CHAP;
            textLayoutFormat.fontSize = 32;
            textLayoutFormat.fontWeight = FontWeight.BOLD;

            var textFlow:TextFlow = new TextFlow();
            var paragraphElement:ParagraphElement = new ParagraphElement();
            textFlow.addChild(paragraphElement);

            var span:SpanElement = new SpanElement();
            span.text = "This is an example";
            paragraphElement.addChild(span);

            textFlow.format = textLayoutFormat;

            var containerController:ContainerController = new     ContainerController(this, 400, 100);
            textFlow.flowComposer.addController(containerController);
            textFlow.flowComposer.updateAllControllers();
        }
    }
}
  

Комментарии:

1. можете ли вы пояснить, что добавление ‘FontWeight = FontWeight.BOLD’ придало смелости шрифту? В любом случае это выглядит как жирный шрифт.

2. По моему опыту (я разработал и поддерживаю онлайн-дизайнер, который использует около 100 шрифтов), даже если шрифт выделен жирным шрифтом, вам все равно часто приходится устанавливать для него жирный шрифт, чтобы он отображался правильно. Я создал набор скриптов для преобразования файлов шрифтов в классы, а затем скомпилировал их здесь blog.alastairdawson.com/2009/06/30 /…

3. Спасибо за ваши комментарии, мне нужно было изменить ‘Tahoma.tff’ на ‘TahomaBD.tff’. Этот шрифт не отображается в папке Windows fonts.

Ответ №2:

Определенно существует проблема с применением шрифта, набранного жирным шрифтом.

Шрифт не будет выделен жирным шрифтом в следующем коде, если вы динамически обновите текст позже где-нибудь в коде.

 var myTextFormat:TextFormat = new TextFormat();
myTextFormat.font = "Arial";
myTextFormat.bold = true;
myTextField.setTextFormat(myTextFormat);

//
myTextField.text = "some dynamic text";
  

Вместо этого вам нужно применять текстовый формат каждый раз, когда вы обновляете текст.

 var myTextFormat:TextFormat = new TextFormat();
myTextFormat.font = "Arial";
myTextFormat.bold = true;

//
myTextField.text = "some dynamic text";
myTextField.setTextFormat(myTextFormat);
  

Но обычно я устанавливаю его в качестве шрифта по умолчанию, как показано ниже,

 var myTextFormat:TextFormat = new TextFormat();
myTextFormat.font = "Arial";
myTextFormat.bold = true;
myTextField.defaultTextFormat = myTextFormat;

//
myTextField.text = "some dynamic text";
  

Не идеальный способ для надежного проекта, но он работает.

Сообщите об этой проблеме на, bugs.adobe.com

Ответ №3:

 var myFormat:TextFormat = new TextFormat();
myFormat.color = 0x000000;
myFormat.font = "Arial Bold";
myFormat.bold = true;
txt.defaultTextFormat = myFormat;
  

Комментарии:

1. Пожалуйста, отредактируйте свой ответ, объяснив, почему это хорошее решение.