11RIA 闪客社区 - 最赞 Animate Flash 论坛

搜索
查看: 128|回复: 2
上一主题 下一主题

[文本框 & 文本引擎] 脱离TextField的点阵文本渲染引擎TextBox(可应对安卓字体错乱)

[复制链接] TA的其它主题
发表于 2024-3-2 23:01:36 | 显示全部楼层 |阅读模式

【游客模式】——注册会员,加入11RIA 闪客社区吧!一起见证Flash的再次辉煌……

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
应 @Liushui 之邀,利用寒假尝试了下
(宋体12-17字号不会失真,其它字体容易失真)

宋体

宋体
(示例)

楷体

楷体
(示例)

黑体

黑体
绪论:

AIR for Android中,旧版的airsdk在某些型号的手机中出现字体错乱,据说是由于字体映射表错误造成的。除了更新airsdk和嵌入字体外,笔者想出了另一种解决方案。
ttf的每个字都渲染出一个点阵字体,用as3读取点阵字体文件,然后再用bitmap显示点阵。当然点阵字体只能用固定的字号,缩放会导致失真。笔者先测试了一下16*16*65536生成了一个大小为32*64KB=2MB的文件(当时扩展名叫afb Acid Font Binary),可以做到,只是存在两个问题:①ttf渲染点阵需要时间 ②有些字体,系统自动进行的消除锯齿会使某些像素既不是黑色也不是白色,而是不同程度的灰色,如何处理这些灰色都会使结果字体失真。
笔者先寻找点阵字体的通用格式fon,寻找其文档。接下来发现,这种格式并不统一。找到的文档中所介绍的fon为易于读取的一种,但系统字体中的fon却是MZ格式的,而另一款游戏中自带的fon又是它的另一种格式。综合情况,为了易于读取,笔者只得自定义格式cfb,具体细节见txt介绍。您可以使用“字体生成器”生成cfb文件。
引擎非常简洁,主要只有两个类:TextBox.asBitFont.as。其中BitFont对应字体文件,而TextBox则是用来代替TextField的(因为TextInputTextArea都被用了,只得借用C#中的词)。另外,OurPatch.as可以帮助您把某项目中的全部TextField批量替换成TextBox
大致关系如下:您需先使用BitFont读取cfb文件,此处有两种方式,一是使用URLRequest外部加载,二是借助Flex的方法使用[embed]标记把cfb文件以ByteArrayAsset的二进制形式嵌入swf中,然后再用BitFont加载。注意:第一种方法是异步操作,在从您开始加载到加载成功或失败的结果中有一段等待期,在这段时间内,您可以设置TextBoxtext等大多数属性,TextBox会自动等待字体加载成功后即显示文本。但是,在等待期内,您获取如maxScroll等属性时将不会得到正确的数值。因此,您应加载事件侦听器,等待TextBoxcomplete事件后再开始您的执行。第二种方法是同步操作,只有在ByteArray加载并解析完成后,代码才会继续执行,因此您无需考虑等待期的问题。显然更加推荐第二种方法。
此版本的TextBox只有显示功能,不能选中也不能编辑。如果在电脑端,选中和编辑功能很容易实现,可以用一个闪动的矩形反色像素区域代表光标;支持caretIndexselection等属性;在TextBox获取焦点时,把焦点转移给一个看不见的TextField然后侦听其输入与按键,决定TextBox的输入与退格;使用ContextMenuClipboard控制剪贴板。但是因为主要问题是出现在AIR手机端,电脑端一般不需要这样的引擎,因此未予支持。TextBox支持滚动条滚动但未支持鼠标滚轮滚动也是相同原因。而手机端的选择是由长按控制的,概念较为模糊,如有需要,您可自行尝试处理。对于手机端的编辑而言,建议寻找一种方法,生成类似于jsprompt()的输入对话框,输入框中的默认文本为文本框中的现有文本,让用户编辑后确定,获取到编辑后的文本。
(更多介绍请看文件)
(对不起呜呜呜QAQ等级低,这里只能上传1MB的文件>_<原谅我)
百度网盘下载(15.9MB)

 楼主| 发表于 2024-3-2 23:03:17 | 显示全部楼层
链接被吞了QAQ
/s/104McOMujFX52swcGP31W9w?pwd=2003
回复

使用道具 举报

 楼主| 发表于 2024-3-2 23:14:38 | 显示全部楼层
摘要:
BitFont.loadBitFont() 加载字体
BitFont.getBitFont() 获取字体
TextBox 实现了TextField中的最主要的几个常用功能,例如:
text
htmlText
textColor
appendText()
width/height
textWidth/textHeight
border/borderColor
background/backgroundColor
multiline/wordWrap/rowSpacing
leftMargin/rightMargin/topMargin/bottomMargin
scrollV/scrollH/maxScrollV/maxScrollH
除此之外
还有scrollBarV/scrollBarH(滚动条开关)
useIbeamCursor(使用工字型鼠标)
注释不多QAQ不是我不喜欢注释 而是我觉得字面已经写的很明白了 能看懂的人不需要注释也能看懂
至于风格QAQ我就是喜欢紧凑型风格
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)



快速回复 返回顶部 返回列表