明明直接用就可以了,非要在Creator里面写???

点击上方亿元程序员+关注和★星标

引言

哈喽大家好,最近笔者又又又看到有小伙伴吐槽:

最近 刚入职一家公司,大佬让我负责战斗飘字相关模块,先将美术给的资源在Creator中制作成艺术字。

艺术字 的制作不是有很多现成的工具吗?例如BMFont。

明明直接用就可以了,非要在Creator里面写???

大佬肯定有大佬的理由,笔者就不深入探讨了,如果硬要说,可能是对小伙伴爱的考验。

言归正传 ,本期带大家一起来看看,如何在Cocos游戏开发中,自定义插件制作位图字体。

本文源工程可在文末获取,小伙伴们自行前往。

什么是位图字体?

位图字体将整套字符预渲染为一张纹理图集;渲染时,只需根据每个字符的UV坐标从中取样并拼接即可。

位图字体有什么好处?

位图字体 ,其实在优化DC中也是很常见的,如果我们战斗的飘字用Label系统字体,不仅不好看,DC也会随着数量增加,应该也没人直接这么干。

位图字体如何制作?

位图字体的实现分为两步:

第一步,提前将全部字形整合到一张纹理图集中;

第二步,运行时通过查询字符的UV坐标,从该图集中提取对应图像区块并依次绘制。

自定义插件制作位图字体

接下来 ,我们一起来看看如何在Creator中,自定义插件实现一个位图字体制作工具。

可能有小伙伴有疑问了 ,那可以直接在插件中使用BMFont工具吗?可以是可以,导演不让啊!

1.资源准备

首先将美术搭子给的资源用字符命名好。

2.创建插件

想要自定义插件制作位图字体 ,首先要创建我们的插件,通过菜单扩展->创建扩展打开扩展创建面板,选择一个空白模板进行创建并启用插件。

3.插件整体流程

开始--->在资源管理器中选择文件夹->遍历文件夹下所有的PNG图片->获取所有散图的尺寸信息->将散图合成一张图->根据图的信息生成fnt配置文件->结束

  • 选择文件夹 :首先通过let uuids = Editor.Selection.getSelected("asset")获取选中的资源管理器中的文件夹。

  • 文件夹路径 :通过let asset_url = await Editor.Message.request("asset-db", "query-path", uuids[0])获取选择的文件夹路径。

  • 遍历散图 :通过fs模块let files = fs.readdirSync(asset_url)获取所有散图的路径。

  • 读取散图信息 :通过Jimp库(图像处理库)const image = await Jimp.read(filePath);读取散图的尺寸。

  • 合图 :通过Jimp库(图像处理库)const texture = new Jimp(textureWidth, textureHeight, 0x00000000);创建画布,然后通过texture.composite(image, x, y);画图,最后通过await texture.writeAsync(texturePath);保存合图。

  • 生成fnt配置 :根据获取到的散图信息,和合图信息,文件名就是对应字符,按照fnt配置的格式,填充内容,并且生成配置文件。

4.编译测试

我们直接在生成的插件模板中(偷懒,别学),执行我们的插件逻辑。

在插件目录 ,安装依赖npm install和构建插件npm run build。

5.效果预览

将生成好的字体文件设置一下即可看到效果。

结语

往往大佬们坚持要自己开发工具,很多时候并不是因为固执,可能是对原理的执着、工具的可控或者是公司内部的约束等等。

小伙伴们的大佬们有没有什么特别的要求和规范呢?

本文源工程 可通过私信 发送 BMFont 获取。

我是"亿元程序员",一位有着8年游戏行业经验的主程。在游戏开发中,希望能给到您帮助, 也希望通过您能帮助到大家。

AD:笔者线上的小游戏《打螺丝闯关》《贪吃蛇掌机经典》《重力迷宫球》《填色之旅》《方块掌机经典》大家可以自行点击搜索体验。

实不相瞒,想要个赞 和爱心 !请把该文章分享给你觉得有需要的其他小伙伴。谢谢!

推荐专栏:

知识付费专栏

你知道和不知道的微信小游戏常用API整理,赶紧收藏用起来~

100个Cocos实例

8年主程手把手打造Cocos独立游戏开发框架

和8年游戏主程一起学习设计模式

从零开始开发贪吃蛇小游戏到上线系列

点击下方灰色按钮+关注。

相关推荐
Java后端的Ai之路3 小时前
06-React-Props
前端·react.js·前端框架
Flynt3 小时前
开源"间谍卫星"说数据全是真的,我把它的免key数据源挨个试了一遍
前端·开源·数据可视化
Csvn4 小时前
渲染管线
前端
程序员大阳4 小时前
副队长CSS教程(33)–圆角与透明
前端·css·透明·圆角
志尊宝4 小时前
Vue3 零基础每日笔记(082):文件上传实战——el-upload 校验、自定义上传、头像预览
前端·javascript·vue.js·笔记·#javascript·#vue.js
鬼手点金5 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
柳杉5 小时前
借助 Codex 和可视化工作流,从调研到完整实现,3D 大屏竟然可以这么简单
前端·ai编程·数据可视化
IMPYLH5 小时前
HTML 的 <wbr> 元素
前端·html
Dovis(誓平步青云)5 小时前
常用命令藏得太深?怎么做一个快捷命令坞
运维·前端·自动化·音视频·prometheus
IT_陈寒6 小时前
Vite的这个问题坑了我三天,原来如此解决!
前端·人工智能·后端