2

Actionscript Bitmap(またはBitmapData)がおかしい。cacheAsBitmapはデフォルトでfalseであるだけでなく、BitmapDataは実際には単なるビットマップではないようです。

テキスト行のアルファをアニメーション化すると、テキスト行が点滅することがわかりました。私はそれをさまざまな方法で回避しようとしましたが、その1つは、背景付きのテキストをビットマップに描画し、ビットマップをアニメーション化することでした。

package 
{
    import flash.events.Event;
    import flash.display.Sprite;

    import flash.display.Bitmap;
    import flash.display.BitmapData;

    import flash.text.TextField;

    public class Main extends Sprite 
    {
        private var bdata1:BitmapData = new BitmapData ( 150, 50, false, 0xDDDDFF );
        private var bitmap1:Bitmap = new Bitmap( bdata1 );
        private var bdata2:BitmapData = new BitmapData ( 100, 100, false, 0x00FFFF );
        private var bitmap2:Bitmap = new Bitmap ( bdata2 );

        private var show:Boolean = false;

        public function Main():void 
        {
            stage.frameRate = 1;
            var tf:TextField = new TextField ();
            tf.text = "layer top";
            bdata1.draw( tf );
            tf.text = "layer bottom"
            bdata2.draw ( tf );

            //*
            bitmap1.cacheAsBitmap = true;
            bitmap2.cacheAsBitmap = true;
            //*/

            addChild ( bitmap2 );
            addChild ( bitmap1 );
            addEventListener (Event.ENTER_FRAME, onEnterFrame );
        }   

        private function onEnterFrame ( e:Event ):void
        {
            if ( show ) var diff:Number = .2;
            else diff = -.2;

            bitmap1.alpha += diff;
            if ( bitmap1.alpha >= 1 ) {
                show = false;
                bitmap1.alpha = 1;
            }
            else if ( bitmap1.alpha <= 0 ) {
                show = true;
                bitmap1.alpha = 0;
            }
        }
    }
}

それがすべきことは、「レイヤー下部」と「レイヤー上部」のテキスト間のスムーズな移行です(FPSを変更した場合)。少なくとも私のマシンでは、それが行うことは奇妙であり、ビットマップ内のテキストがビットマップのように扱われるのではなく、ベクトル(おそらくTextLine)として扱われることを明確に示しています。では、BitmapDataはビットマップのみをエミュレートしているのでしょうか?バグですか?私は何かが足りないのですか?

4

1 に答える 1

3

まず、Fontswfに埋め込む必要があります。を埋め込んだとしましょう"Arial"。次に、これを試してください:

var tf:TextField = new TextField ();
var tf_format:TextFormat = tf.defaultTextFormat;
tf_format.font = "Arial";   //Specifying embedded font's name
tf.defaultTextFormat = tf_format; 
tf.embedFonts = true;
tf.antiAliasType = AntiAliasType.ADVANCED;
//.........

この後、「スムーズなテキスト」が作成されます。

于 2012-05-20T11:00:43.477 に答える