Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Embedding Fonts in AS3 - Dynamic Text Field disappears

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?

like image 654
Andy Moore Avatar asked Nov 16 '09 20:11

Andy Moore


2 Answers

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!

like image 74
grapefrukt Avatar answered Sep 24 '22 01:09

grapefrukt


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.

like image 33
hannes Avatar answered Sep 22 '22 01:09

hannes