`

BitmapText,美术字处理方案

阅读更多

游戏开发中..常常需要显示特殊的美术字体..
像经验数字~扣血扣蓝~倒计时等~
像一般的基于字体的美术字~只需要嵌入字体即可~
但像下面这类纯手工的美术字~
art word

处理起来就没有这么方便..

常见的方案一般为截取相应位置的bitmap数据..
然后重新拼成需要的内容..再显示之~

效果如下(可在下方的输出框内输出数字试试):

第一行的数字是不忽略透明空白,第二行则是忽略透明空白,对比一下应该就能明白了

下面是源码..代码很简单..我就不多说了..

package
{
	import flash.display.Bitmap;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.text.TextField;
	import flash.text.TextFormat;

	import net.l4cd.display.BitmapText;

	[SWF(backgroundColor="#FFFFFF",width="550",height="200")]

	/**
	 * BitmapTextExample
	 * @author l4cd
	 * @website http://l4cd.net
	 */
	public class BitmapTextExample extends Sprite
	{
		[Embed(source="number.png")]
		private var BitmapTextClass:Class;

		private var bt1:BitmapText;
		private var bt2:BitmapText;
		public function BitmapTextExample()
		{
			//不忽略透明空白
			bt1 = new BitmapText((new BitmapTextClass as Bitmap).bitmapData,50,50,0,false,"0123456789");
			addChild(bt1);
			bt1.x = 20;
			bt1.y = 10;

			//忽略透明空白
			bt2 = new BitmapText((new BitmapTextClass as Bitmap).bitmapData,50,50,0,true,"0123456789");
			addChild(bt2);
			bt2.x = 20;
			bt2.y = 80;

		 	bt1.text = "152443004";
			bt2.text = "152443004"; 

			graphics.beginFill(0xCCCCCC);
			graphics.drawRect(0,150,550,50);

			var txt:TextField = new TextField();
			txt.defaultTextFormat = new TextFormat("宋体",12);
			txt.background = true;
			txt.backgroundColor = 0xFFFFFF;
			txt.multiline = false;
			txt.border = true;
			txt.borderColor = 0xCCCCCC;
			txt.type = "input";
			txt.width = 200;
			txt.height = 16;
			txt.x = 20;
			txt.y = 165;
			txt.restrict = "0-9";
			txt.text = "152443004";
			addChild(txt);
			txt.addEventListener(Event.CHANGE,_txtChanged);
		}

		private function _txtChanged(e:Event):void
		{
			bt1.text = bt2.text = e.target.text;
		}
	}
}

 

package net.l4cd.display
{
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.geom.Matrix;
	import flash.geom.Point;
	import flash.geom.Rectangle;

	/**
	 * @author l4cd.net
	 * @website http://l4cd.net
	 */
	public class BitmapText extends Sprite
	{
		private var _map:Array;
		private var _chars:String = "0123456789+-.";
		private var _bitmapData:BitmapData;
		private var _height:Number;
		private var _width:Number;
		private var _blank:Boolean;

		/**
		 * @param bitmapData	位图的bitmapData对象
		 * @param width			单个字符的宽
		 * @param height		单个字符的高
		 * @param gap			输出的文字间隔
		 * @param blank			是否忽略空白
		 * @param chars			位图的字符集
		 *
		 */
		public function BitmapText(bitmapData:BitmapData,width:Number,height:Number,gap:Number,blank:Boolean=false,chars:String="0123456789+-.")
		{
			super();
			_bitmapData = bitmapData.clone();
			_width = width;
			_height = height;
			_blank = blank;
			_map = [];
			if(chars)_chars = chars;
			for(var i:uint=0;i<_chars.length;i++)
			{
				var bit:BitmapData = new BitmapData(width,height,true,0);
				bit.copyPixels(_bitmapData,new Rectangle(i*width,0,width,height),new Point(0,0));
				var rect:Rectangle = bit.getColorBoundsRect(0xFF000000,0x00000000,false);
				rect.x = rect.x + i*width;
				_map[_chars.charAt(i)] = rect;
				bit.dispose();
			}
		}

		private var _text:String;
		public function get text():String
		{
			return _text;
		}
		public function set text(value:String):void
		{
			_text = value;
			_draw();
		}

		private function _draw():void 
		{  
			graphics.clear();  
			var x:Number = 0;  
			for(var i:uint=0;i<text.length;i++)  
			{  
				var char:String = text.charAt(i);  
				var index:int = _chars.indexOf(char);  
				var rect:Rectangle = _map[char];  
				if(!_blank)x+=rect.x%_width;  
				graphics.beginBitmapFill(_bitmapData,new Matrix(1,0,0,1,x-rect.x,0),false);  
				graphics.drawRect(x,rect.y,rect.width,rect.height);  
				x+=rect.width;  
				if(!_blank)x = (i+1)*_width;  
			}  
			graphics.endFill();  
		}  

		public function destroy():void 
		{  
			graphics.clear();  
			_map = [];  
			_bitmapData.dispose();  
			_bitmapData = null;  
		}  
	}

}
 
分享到:
评论

相关推荐

    unity自动生成美术字体

    在Unity引擎中,美术字体(也称为自定义字体或图形字体)是用于游戏或应用程序中的特殊字体类型,它们可以提供比系统默认字体更独特的视觉效果。Unity提供了方便的方法来导入和自动生成美术字体,以便在游戏界面上...

    美术字及变体美术字.doc

    美术字注重笔画的规整,字形、字距的一致性,以及对主次笔画、实虚边、重心稳定等细节的处理。例如,主笔要求平稳,次笔则需要灵活变化;虚边应延伸,实边应内收;字形通常呈现上紧下松的布局,以达到视觉上的平衡感...

    unity美术字体制作软件bmfont1.14

    用于unity3D里美术字体的制作,配置文件导出后改扩展名为txt,unity能识别

    2021年小学美术教案单线体美术字.pdf

    2021年小学美术教案单线体美术字.pdf

    中小学数字美术教室解决方案.doc

    中小学数字美术教室解决方案是针对现代教育技术在美术教学中的应用,旨在提升美术教育的质量和效率。这类教室的设计和建设充分考虑了美术学科的特点,旨在培养学生的审美意识、观察想象能力和动手实践能力。以下是对...

    小学美术字PPT教案.pptx

    小学美术字是教育体系中一个重要的组成部分,旨在培养学生对美的感知和艺术创作能力。美术字不仅具有装饰性,还能在日常生活中起到美化环境、传递情感和信息的作用,例如节日的福字、对联等。 美术字的发展源远流长...

    漂亮的美术字.pptx

    【漂亮的美术字】是关于设计和创作美术字的教程,主要关注的是如何书写美观、规范的黑体字。美术字,又称装饰字或设计字,是一种具有艺术效果的文字,广泛应用于广告、海报、标志等视觉传达设计中。在这个PPT教程中...

    用美术字图片和BMfont生成NGUI自定义中文字体

    ### 使用BMfont与美术字图片生成NGUI自定义中文字体 #### 一、引言 随着游戏开发技术的发展,自定义字体的需求日益增长。在Unity NGUI中,使用BMfont工具结合美术字图片来创建自定义中文字体是一种常见且有效的方法...

    Unity 美术字制作工具

    一键生成unity艺术字 查看我的,csdn b 越来越jian了https://blog.csdn.net/K20132014/article/details/80462509

    篆角乡初级中学校音乐美术考试实施方案.pdf

    篆角乡初级中学校音乐美术考试实施方案.pdf

    智慧美术馆大数据云平台建设和运营整体解决方案 智慧美术馆信息化管理平台建设方案.doc

    智慧美术馆大数据云平台建设和运营整体解决方案是针对现代美术馆在信息化管理方面的需求,旨在提升美术馆的运营效率和服务质量。本方案由郎丰利提出并更新至V3.0,旨在通过集成先进技术,构建一个集约化、物联网接入...

    美术字大纲.doc

    美术字大纲.doc

    新建美术字MicrosoftPowerPoint演示文稿PPT学习教案.pptx

    【Microsoft PowerPoint 演示文稿与美术字创建教程】 在商业、教育和日常生活中,Microsoft PowerPoint 已经成为制作专业演示文稿的首选工具。它不仅提供了丰富的模板和设计元素,还允许用户自定义美术字,使得内容...

    美术学期工作方案.docx

    【美术学期工作方案】是一个关于规划和实施美术教育的文档,主要涵盖了指导思想、工作目标、详细工作安排等方面,旨在提高学生的美术创作能力、艺术修养,同时提升教师的专业水平。 【指导思想】强调以学校的训练...

    学写美术字-宋体字.docx

    学写美术字-宋体字.docx

    美术馆公司(行业)薪酬管理制度方案-薪酬设计方案资料文集系列.docx

    美术馆公司的薪酬管理制度方案是设计和管理员工薪资体系的重要文件,旨在确保薪酬的公正、竞争性和激励性。该方案包括了多个关键章节,涵盖了薪酬管理的各个方面。 第一章总则明确了薪酬制度的基本概念和适用范围,...

    美术展览活动方案.pdf

    美术展览活动方案.pdf

    建筑设计基础——美术字.pdf

    建筑设计基础——美术字.pdf

Global site tag (gtag.js) - Google Analytics