ActionScript — маскирование родителя динамического текста удаляет сглаживание?

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

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

альтернативный текст

package
{   
import flash.display.Sprite;
import flash.display.Shape;
import flash.text.*;

public class Test extends Sprite
    {
    public function Test()
        {
        //Create Background Canvas
        var canvas:Sprite = new Sprite();
        canvas.graphics.beginFill(0xFF0000)
        canvas.graphics.drawRect(0, 0, 100, 100);

        //Create Dynamic Text
        var field:TextField = new TextField();
        field.width = 100;
        field.autoSize = TextFieldAutoSize.LEFT;
        field.selectable = false;
        field.text = "Dynamic\nText";

        var format:TextFormat = new TextFormat();
        format.font = "Myriad Pro";
        format.color = 0xFFFFFF;
        format.size = 14;
        field.setTextFormat(format);

        //Add Dynamic Text To Background Canvas
        field.x = canvas.width /2  - field.width / 2;
        field.y = canvas.height / 2 - field.height / 2;
        canvas.addChild(field);

        //Create Mask
        var canvasMask:Shape = new Shape();
        canvasMask.graphics.beginFill(0);
        canvasMask.graphics.drawRoundRect(0, 0, 100, 100, 50);

        //Add Background Canvas And Mask To Display List
//      canvas.mask = canvasMask;
//      addChild(canvasMask);
        addChild(canvas);
        }
    }
}

person Chunky Chunk    schedule 08.11.2010    source источник


Ответы (1)


Кажется, это связано с тем, как TextField кэшируется как растровое изображение при применении маски. На самом деле я смог воспроизвести такое же поведение, просто переключив свойство cacheAsBitmap в TextField.

Добавление этих строк, похоже, решает проблему.

    field.embedFonts = true;
    field.antiAliasType = AntiAliasType.ADVANCED;
    //you can adjust the thickness & sharpness if needed
    field.thickness = 200;
person PatrickS    schedule 08.11.2010
comment
ааа, растровое кэширование. конечно. ваше решение работает хорошо, спасибо. но даже с настройкой толщины и резкости текстового поля шрифт по-прежнему не такой точно, как шрифт без кэширования растрового изображения. не поймите меня неправильно, это очень близко и вполне приемлемо, но мне просто любопытно. Я полагаю, это результат того, что встроенный шрифт пытается имитировать свой естественный векторный контур в виде растрового изображения? - person Chunky Chunk; 08.11.2010