埋め込み8pxビットマップフォント
// forked from gyuque's ロックマン from ニコニコモンズ
package
{
import flash.display.*;
import flash.events.Event;
import flash.text.*;
import flash.geom.*;
[SWF(width="465", height="465", backgroundColor="#604020", frameRate="30")]
public class BitmapFontTest extends Sprite
{
private var buffer:BitmapData = new BitmapData(223, 136, false, 0x308040);
private var font:BitmapFont;
private var tx:TextField = new TextField();
function BitmapFontTest()
{
var table:String = ""
+ " ABCDEFGHIJKLMNOPQRSTUVWXYZabcde"
+ "fghijklmnopqrstuvwxyz0123456789_"
+ "-=+\\|[{]};:'\",<.>/?!@#$%^&*()~`㍗";
font = new BitmapFont(new SpritePool(FONT), table, 8, 8);
var screen:Bitmap = new Bitmap(buffer);
screen.x = screen.y = 10;
screen.scaleX = screen.scaleY = 2.0;
addChild(screen);
tx.type = TextFieldType.INPUT;
tx.multiline = true;
tx.defaultTextFormat = new TextFormat("MS Gothic", 10, 0x000000);
tx.border = true;
tx.background = true;
tx.backgroundColor = 0xFFFFFF;
tx.x = 10;
tx.y = 284;
tx.width = 445;
tx.height = 171;
tx.text = "(BitmapFont TEST)\r"+
"\r"+
"A-Z a-z 0-9 \r"+
"_-=+\|[{]};:'\".<,\r"+
">/?!@#$%^&*()~`㍗\r"+
"\r"+
" ==RANK===SCORE====DATE====\r"+
"\r"+
" 1st 100000 00/00/00\r"+
" 2nd 50000 00/00/00\r"+
" 3rd 30000 00/00/00\r"+
" 4th 20000 00/00/00\r"+
" 5th 10000 00/00/00\r"+
"\r"+
" ==========================";
addChild(tx);
tx.addEventListener(Event.CHANGE, function(e:Event):void{change();});
change();
}
private function change():void
{
buffer.fillRect(buffer.rect, 0x308040);
font.drawText(buffer, tx.text);
}
}
}
import flash.display.*;
import flash.geom.*;
import flash.utils.ByteArray;
import mx.utils.Base64Decoder;
class BitmapFont
{
private var chip:Object = new Object();
private var width:int;
private var height:int;
private var bmp:BitmapData;
public function BitmapFont(bmp:BitmapData, texttable:String, width:int, height:int)
{
this.bmp = bmp;
this.width = width;
this.height = height;
var num_x:int = bmp.width/width;
var num_y:int = bmp.height/height;
for(var i:int = 0; i < texttable.length; i++)
{
chip[texttable.charAt(i)] = new Rectangle(width*(i % num_x), height*(Math.floor(i / num_x)), width, height);
}
}
public function drawText(surface:BitmapData, txt:String, x:int = 0, y:int = 0):void
{
var px:int = x;
for(var i:int = 0; i < txt.length; i++)
{
var char:String = txt.charAt(i);
if(char == "\r")
{
y += height;
x = px;
continue;
}
if(chip[char] == undefined) {char = " ";}
surface.copyPixels(bmp, chip[char], new Point(x, y));
x += width;
}
}
}
class SpritePool extends BitmapData
{
function SpritePool(src:*)
{
var decoder = new Base64Decoder();
decoder.decode(src.DATA);
var ba:ByteArray = decoder.toByteArray();
ba.uncompress();
var w:int = ba.readUnsignedShort();
var h:int = ba.readUnsignedShort();
super(w, h, true, 0);
var pal_length:int = ba.readUnsignedByte();
var pal:Array = new Array(pal_length);
for (var i:int = 0;i < pal_length;i++) {
pal[i] = ba.readUnsignedInt();
}
lock();
var x:int, y:int, k:uint;
for (y = 0;y < h;y++) {
for (x = 0;x < w;x += 2) {
k = ba.readUnsignedByte();
setPixel32(x , y, uint(pal[k&0x0f]));
setPixel32(x+1, y, uint(pal[(k&0xf0)>>4]));
}
}
unlock();
}
}
class FONT
{
public static const DATA:String =
'eNqdVrtu60YQHT2uPekEAQZcilDjklEh+DMk4BYpCbCgSlWEyzV5Tc2P3DJlyrQp8xv5hJTKOTNLSg6SFFn4eGZ3Z2e1j3OWM5HnHwTl+sf1ev0N/375/erlT+DnX6/X79+v1+L5R8ZIsZCvRS0H4GvgkfC6VI8CKxL+YSZu3c/x9/bAsbn/hsjJqTg+SvU4equulSd7'+
'e7jBLABfz4OUg4q0+qStrTqRp3k7PM3Pw+cxAXkdjGMmMFZbTfY2rHatcHwU5M2lsGpRaNUXKpatZHhdqguiGi1OF930aK+bvqgZ93eIMZb+ZtFYcYKtYbVBtsbETgvUhRDkcIuy07LbtXvb6eSL420/h+3ip+511xq2AjFvrx36Oo8dgfElxjCW9XJAPOKkHbQEwu7R'+
'/jrf2esctqPl/HWzfa/tZVZj/lo38E0d+sL2d8EW1LLV+rTwrfB2xRjGNlurTzFeCMaiXZpembdqtr706mLCXNUFY7BPbtHP+Vt7/mh1RXwJy9MmvO1DSixD1zjFtW/F2O7A70S7uS9jLKxvG9qH9RdsHeaIcech5nGLOyZ+sodvzfZoFdAEljwxr6NPtkf47zjFw7Ly'+
'PsQD0c+4w3KsC5YeFmvuj9oYx6swJ9o9xvvD9/NP2I+EdQiQAoY28TrvVPI+j5Pos+xrxOlUR0XC0k15vApzSsDnYYPbTS0TLzcLx+T/z0Id8DxZEzjHpCfZertffvyGXfvgvOTlBlbd+cH9/yq7f+9yHdgNk6Ygv056Ah2Y2v3yYwv6U+aiOTa9X1iZoa2ogq9F8HYB'+
'Xodlm0A37rBZwKIPfHfNSNABAvl01JN0pxecnpwth9J5KVg24Xwlj1vwP/M1oytbg8XZtab3/C8fwH/kSQZdIO+dKHsjdkbtCE2BjlAniFDCxng5nZfkLlE1YfuG/N8EzzOqiybwdgbSSNTJ/+A78his1TkXOI97Bl1BfKK+hD5o1grnPrkp6dl5Se4S4K3bYf984/l+'+
'bef9+oPLStAL53TwXM/sizHaDiaTZpDz0IRk0AG515KsFSzgppCTPXiKn+387Q9L2sv2pxvPnTc/feMWNc5vasLx2x3Pl8LlB8/J75svR514n/Uha82S3Ax+O3FF1k5h91PSzzzPPSl4rs7nf+Y5HZ18V47M+1Efss584u0Mb7JrQPCX3wW45Lfi2lB/er/jPa9F7jnP'+
'mA2+E2byOOVxPakjX1G5/Tq7y13yO8DfevH3fmdZDx7uQG1oYyf8dEcdwIl2b64Zzm3oCS67fHRnE3/zgXJ48LzIs3oN+5FX79yv+PgF7/MjJ5M/QoC+ivlBhGkbqgbfBfGd8H66kO+2OZkWPb8X8Ob3rhl4GDlhw/33oyygJf5m4yxcB8B35+34yRPv/qRLguWUNuj9'+
'8r3/jDYD1xHfDYO//cyX3vwa2a4d5qEFmgkXpTO0Y25/o/F75dTbqAHiD5v7CmnLI/isJPH62Mb+Jsdhst61BKQ6vSgIFLfjtLUqa0YQLkr92IcG8D6WkLw93uqsAf4zR98xv7srlK51tGFZDu4P6nzToRVfztQF6z5iq9Z6foXPeGjEmCbl/mltL+8WGoB3eYOfzs+T'+
'LXOHLtwK/dAIXzaXxPjgNvXA5MXkotAHbtHWlsiNjTvmfGM52ueXy0YET5M5dWWluX38YNYcHH+S9DbWuZ38/U+eIL4PpsCkd/Ml/QvIQIYz';
}