高级执事
阅读权限 2
积分 3658
侠名
UID 18
主题
帖子
精华
好友
银子
金子
贡献
威望
推广
活跃
荣耀
注册时间 2017-11-7
最后登录 1970-1-1
在线时间 小时
个人主页
|
【游客模式】——注册会员,加入11RIA 闪客社区吧!一起见证Flash的再次辉煌……
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 TKCB 于 2019-3-19 09:11 编辑
转载:9RIA游戏开发者社区(天地会)
作者:iloveas(大神)
总目录:[原创]AS3游戏开发实用技巧汇总
游戏画面往往具有很强的设计性,所以游戏里的每个元素都非常讲究,容不得半点马虎,字体自然也不例外。正因如此,由操作系统绘制的设备字体通常都不适合于精致的游戏,因为它们不仅缺乏美观,而且容易受操作系统、浏览器等外部因素的影响。为了让字体适应游戏界面,我们一般都采取嵌入特殊字体的方式。
此时文本将由FlashPlayer进行渲染,可控性较强,理论上是一个完美的解决方案。但很不幸,在天朝,嵌入字体是个很让人蛋疼的问题。对于文字内容未知的情况,字库的大小,你懂的。但这怪不得Adobe,谁让程序不是国人发明的呢~~~
为了减少字库的体积,大家往往会作出一定的取舍,比如游戏面向的用户群是中国大陆的玩家,我们就只嵌入简体中文,以及一些常用的数字和符号。那么问题来了,如果某天,一个名为“鳥屋2015”的朋友注册我们的游戏,那他的名字就会完全显示不出来(哪怕“屋2015”这几个字符已经嵌入),鳥屋2015火滚起来的话,就要告我们地域歧视了。
要解决以上问题,我们可以考虑结合服务端进行动态嵌入,要么请求字体,要么一个字一个swf,但这些方法对于游戏来说可行性并不高,前者加重服务器负担,而后者则因为小文件过多而拖慢服务器运行速度。单独开一个服务器来做这些事情吧,成本又有点高~~~
iloveas觉得,既然“鳥屋2015”这个昵称里面只有第一个字尚未嵌入,那么我们完全可以先把嵌入的部分绘制出来。于是接下来的任务,就是判断哪些字符已经嵌入。这里有两个方法,都是一行代码。
第一种方法较为取巧,它利用了显示方面的一些特性:
第二种方法则比较科学,因为它深入到字库:
相比之下,第二种方法更便于后续的处理,运行效率也要高一些。
有了这样的一行代码,我们就可以逐字判断,并且把没有嵌入的部分筛选出来。之后再根据实际情况,使用设备字体代替或者单独加载缺失的字符。
对于设备字体来说,如果我们可以加以改造,使其跟游戏画面更加吻合的话,那就真的太完美了。所以,iloveas研发了一款适用于Q版,卡通风格游戏的Q版雅黑,应用到《看你有多溅》、《High歌溅舞》等休闲游戏中,效果也相当不错。
当然了,制作这样的字体需要对位图算法和图像处理技巧有一定的了解(设备字体提供到FlashPlayer以后就是位图的形式)。而所有的这些,都可以在iloveas即将出版的《点睛:ActionScript3.0游戏互动编程》一书中找到答案,敬请期待!!
|
|