明明直接用就可以了,非要在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年游戏主程一起学习设计模式

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

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

相关推荐
wadesir1 小时前
Nginx负载均衡代理协议详解(从零开始搭建高可用Web服务)
前端·nginx·负载均衡
秋氘渔1 小时前
Vue 3 组合式写法:侦听器 watch 和 watchEffect 的区别及使用技巧
前端·javascript·vue.js·watch·watcheffect
想睡八个小时1 小时前
已包含的文件名 “a.vue“ 仅大小写与文件名 “A.vue“ 不同
前端·vscode
The_era_achievs_hero2 小时前
Echarts
前端·javascript·echarts
涔溪3 小时前
Vite 和 Webpack 这两款主流前端构建工具的核心区别,包括它们的设计理念、工作机制和实际使用体验上的差异。
前端·webpack·vite
0思必得03 小时前
[Web自动化] 开发者工具元素(Elements)面板
运维·前端·自动化·web自动化·开发者工具
遇到困难睡大觉哈哈3 小时前
Harmony os ——ArkTS 语言笔记(五):泛型、空安全与可选链
前端·笔记·安全·harmonyos·鸿蒙
八哥程序员3 小时前
你真的理解了 javascript 中的原型及原型链?
前端·javascript
冴羽4 小时前
10 个 Nano Banana Pro 专业级生图技巧
前端·人工智能·aigc