emm 尽管我的博客最近的更新频率还不错,但我已经好久没有写过 Coding 相关文档了。
也确实,在工作的业余时间,我不再宅在家里,开始经常出门转转,也没有太多时间去投入到业余的 Coding 里。
为了避免长达一年的空窗间隔期,我决定水一篇文章哈哈。
聊几个我可能一两年前或更早就想写,但一直没能付出实践,得到产出的事情。
以往我在心里还存着一丝,把我的想法藏起来,避免被别人截胡的心态。
这种敝帚自珍的心态却可能会导致自己做了一些傻事和无用功。
现在很欢迎有人能从这些想法中得到启发,或者提出建议,谢谢~
chinese-bitmap-font-generator
中文字体不仅仅在网络 html 中存在着展示难题,在 canvas 渲染,游戏渲染中依旧存在着大量问题。
在我之前的博客里,我提到了网页里中文字体的两种处理方法,对中文字体进行压缩、对中文字体进行切片,感兴趣的可以看下。
在 canvas 展示,游戏渲染中有什么问题呢?比如像是 webgl 加速的游戏渲染引擎 pixi 中,中文字体的渲染其实就是先把字体渲染到 canvas 上,再把 canvas 转成 texture 来进行渲染。
这会导致文本的性能变得很差,同时更改文本时也会导致需要重新生成 texture,也会影响性能。而 webgl 渲染图片包括 Sprite 图时则是非常快的。
pixi 对于这种字体的解决方案是 Bitmap Text,也就是位图字体。大概原理就是以图片的形式加载字体。
以一种 fnt 字体为例,就是其中包含的字体集合和一张对应的图片,其格式如下。
info face="Ark Pixel 12px monospaced zh_cn" size=32 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 outline=0
common lineHeight=32 base=27 scaleW=256 scaleH=256 pages=1 packed=0 alphaChnl=1 redChnl=0 greenChnl=0 blueChnl=0
page id=0 file="test_0.tga"
chars count=94
char id=33 x=144 y=72 width=4 height=22 xoffset=5 yoffset=5 xadvance=16 page=0 chnl=15
这种字体,在处理符号以及英文字体时比较合适,但面对中文字符时,过多的字符数量就显得有些不切实际。
所以有没有一种可能,我把游戏中需要用的中文字体扫描出来,自动生成一个 fnt 字体子集,和一张相对紧凑的 Sprite 图,以供渲染引擎使用。
在这种情况下,可能 stroke、粗体、不同尺寸的字体展示可能也需要重复打到 fnt 字体里,以提供比较高清可用的渲染展示,可以考虑以下面的形式自动识别字体。
`测试字体${bold`黑体字体`} ${size(36)`size36 的字体`}${italic`斜体字体`}`
更进一步,我们可以利用字体切片的原理,以对应的分割方式,将一个完整的字体分割成多个 fnt 字体子集和对应的 Sprite 图。
像是在网页中加载字体一样加载位图字体,支持根据展示的内容自动加载对应的字体子集,以相对小的体积支持全量字体。
同时也要基于 pixi 实现字体的自动加载,即先不展示内容,在字体子集加载完成后再进行展示。
emm 感觉还是有点难的,以上。
image-cloud
这个就简单太多了,就是把下面的图片展示内容抽成一个单独的库。
这个我当时做时,还是有不少细节在里面的,包括图片的懒加载、鼠标移动的动效、点击右上角筛选时的动效、图片的高清展示,不过一直没把它拆成一个独立的库,有点可惜。
之前有次做到一半又没时间了就一直僵在这里,希望 24 年可以完成。
构建时自动计算
emm 不太好描述,也不算一个准确的需求。我都已经忘了最早是因为啥冒出来的这个想法了。
比如像这种:
// dev
const a = @{ 6*9 };
const b = @{ color('blue').grey(60) }
// build
const a = 54;
const b = '#kkkkkk'
more
- 用数位板手写诗歌,生成 svg 动画,然后一行行地展示,边浮动边写
这个可以用 css 把静态的 svg 转换成动画,下面单纯就是把每个 path 按顺序逐渐展示出来,效果还可以。
svg 动画还有一些黑科技,可以参考这个 https://css-tricks.com/svg-line-animation-works/
- chrome插件: 加载已有的常用库软件,比如加载lodash,加载pixi.js
这个已经有了别人写的,挺好用的 https://github.com/pd4d10/console-importer
- pixi 动态时钟
很喜欢这个别人写的动态时钟,canvas 粒子时钟
-
我还是有用 pixi 做一个游戏的打算,emm 大概是魔塔,也可能是类似于《保卫羊村》的自定义地图塔防游戏。
-
待补充更多…
感谢看到这里,欢迎留言~