Embedding Fonts in AS3 - Dynamic Text Field disapp

2020-07-13 09:05发布

问题:

This is hopefully a new problem or just me missing something obvious. Please help! I'm embedding a font into my AS3 application. I'm doing everything by-the-book and it half-works.

In my main class,

    [Embed(source="Art/moolbor.ttf", fontFamily="MoolEmbed", 
        mimeType="application/x-font")]
    var MoolEmbed:Class;

Then later on in my code:

    var newFormat:TextFormat = new TextFormat();
    newFormat.font = "MoolEmbed";
    newFormat.size = 20;
    newFormat.color = 0xFCF374;

    year.autoSize = TextFieldAutoSize.LEFT;
    year.text = "Hello World";
    year.embedFonts = true;
    year.setTextFormat(newFormat);
    year.antiAliasType = "advanced";

This works perfectly fine, and the text shows up beautifully. I can rotate it, alphas apply to it, and it's nicely antialiased. The problem is that the textfield is dynamic - Later on in the code:

    year.text = "And a second hello world";

As soon as this code is triggered, the textfield disappears completely. I turn on

    year.border = true;

and I can see that the textfield is still there, but it's size has shrunk down to just a few pixels. Thinking perhaps it was the autoSize messing things up,

    //year.autoSize = ...;

Same problems. Thinking it might be embedding, I commented out the line:

    //year.embedFonts = true;

And the textfield returns to working status, but (Understandably) loses it's ability to do alphas and rotations.

Any idea what's going on?

回答1:

I wrote a long talkative entry on possible reasons as why this would not work. But as I re-read you code I think i spotted the error. Change the row:

year.setTextFormat(newFormat);

To:

year.defaultTextFormat = newFormat;

That should do it!



回答2:

as defaultTextFormat didnt work for, a combination of the other two tips worked

import flash.text.Font;

in your constructor:

Font.registerFont(MoolEmbed)

and then

After you set the text property for the second time make sure you call setTextFormat(newFormat) again.



回答3:

you need to register your font with the global font list.

import:

import flash.text.Font;

in your constructor:

Font.registerFont(MoolEmbed)


回答4:

After you set the text property for the second time make sure you call setTextFormat(newFormat) again.