BMPText与BMPSlicer——将位图切割成块来显示文字

因为矢量图的表现力毕竟有限,因此我们经常需要使用外部的图片来显示文字等信息,最多的情况就是显示数字和字母。

但是,如果将每个数字或者字母做成一个图片,在程序运行过程中,就要载入许多的小文件,这样出错的几率就会变大,而且也会影响网络性能。因此,我写了两个类来处理这种情况。

例如:要使用0-9的数字图片,可以将0-9拼在一张长条形的图片中,载入后使用 BMPSlicer 来切割,切割后,就可以使用 BMPText 来显示它。

下图就是被切割的图片:

Timer测试图片

程序效果演示:

请使用下面的链接升级 Flash Player 到最新版本:

安装最新的Flash Player插件

测试程序源码:

 1package
 2{
 3import flash.display.Bitmap;
 4import flash.display.Sprite;
 5import flash.events.Event;
 6import flash.events.TimerEvent;
 7import flash.utils.Timer;
 8
 9import org.zengrong.display.BMPText;
10
11
12[SWF(width=200,height=100,backgroundColor=0xCCCCCC)]
13public class BMPTextTest extends Sprite
14{
15    public function BMPTextTest()
16    {
17        _bmpText = new BMPText('0123456789', 46, 52, true, Bitmap(new _timerClass()).bitmapData);
18        _bmpText.gap = -10;
19        addChild(_bmpText);
20        _timer = new Timer(100, 99999);
21        _timer.addEventListener(TimerEvent.TIMER, handler_timer);
22        _timer.start();
23        this.addEventListener(Event.ADDED_TO_STAGE, handler_addToStage);
24    }
25    
26    [Embed(source="timer.png")]
27    private static var _timerClass:Class;
28    
29    private var _bmpText:BMPText;
30    private var _timer:Timer;
31
32    private function handler_addToStage(evt:Event=null):void
33    {
34        _bmpText.x = stage.stageWidth/2 - _bmpText.width/2;
35        _bmpText.y = stage.stageHeight/2 - _bmpText.height/2;
36    }
37    
38    private function handler_timer(evt:TimerEvent):void
39    {
40        _bmpText.text = _timer.currentCount.toString();
41        handler_addToStage();
42    }
43}
44}

BMPText与BMPSlicer源码