`

BitmapText,美术字处理方案

ld2 
阅读更多

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

    此外,美术字对主次笔画的处理、实虚边界的划分以及整体重心的稳定性都有严格的要求,这些细节共同构成了美术字整体的协调与美感。 在美术字的众多类型中,宋体、仿宋体和黑体是三种极为常见且各有特点的美术字。...

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

    基于此背景,本文将深入探讨中小学数字美术教室解决方案的设计理念、实施步骤以及预期效果。 首先,数字美术教室的功能概述。它不仅是一个供学生上美术课的场所,更是第二课堂活动的重要基地。在这样的教室里,学生...

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

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

    漂亮的美术字.pptx

    在当今这个视觉信息爆炸的时代,各种视觉设计元素在我们的生活中无处不在,其中美术字因其独特的魅力和功能性,在广告、海报设计、标志设计等领域扮演着至关重要的角色。美术字,也被称作装饰字或设计字,它不仅仅是...

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

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

    小学美术字PPT教案.pptx

    在小学阶段开展美术字教学,不仅有助于学生认识和掌握汉字的书写艺术,还能培养他们对美的感知和创造力。美术字作为中国传统艺术与现代设计融合的重要组成部分,其悠久的历史与丰富多样性,为我们提供了丰富而生动的...

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

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

    Unity 美术字制作工具

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

    美术学期工作方案.docx

    为了更好地实现美术教育的目标,提升学生美术创作能力与艺术修养,同时加强教师队伍的专业素质,一份详尽的美术学期工作方案显得尤为关键。本文将围绕一份具体的《美术学期工作方案》进行详细解读,旨在展示如何通过...

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

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

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

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

    美术字大纲.doc

    美术字大纲.doc

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

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

    学写美术字-宋体字.docx

    学写美术字-宋体字.docx

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

    美术馆公司的薪酬管理制度方案作为公司内部管理的核心文档,它的设计和完善直接关系到美术馆能否吸引并留住行业内的优秀人才,以及激励员工更好地为美术馆的发展贡献力量。本文将详细解读美术馆公司薪酬管理制度方案...

    美术展览活动方案.pdf

    美术展览活动方案.pdf

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

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

Global site tag (gtag.js) - Google Analytics