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

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

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

相关推荐
打小就很皮...6 分钟前
React 19 + Vite 6 + SWC 构建优化实践
前端·react.js·vite·swc
Highcharts.js9 分钟前
使用Highcharts与React集成 官网文档使用说明
前端·react.js·前端框架·react·highcharts·官方文档
这是个栗子9 分钟前
AI辅助编程(二) - 通译千问
前端·ai·通译千问
VT.馒头20 分钟前
【力扣】2625. 扁平化嵌套数组
前端·javascript·算法·leetcode·职场和发展·typescript
数研小生1 小时前
Full Analysis of Taobao Item Detail API taobao.item.get
java·服务器·前端
Shirley~~1 小时前
Vue-skills的中文文档
前端·人工智能
毎天要喝八杯水1 小时前
搭建vue前端后端环境
前端·javascript·vue.js
计算机程序设计小李同学2 小时前
幼儿园信息管理系统的设计与实现
前端·bootstrap·html·毕业设计
雨季6662 小时前
Flutter 三端应用实战:OpenHarmony “专注时光盒”——在碎片洪流中守护心流的数字容器
开发语言·前端·安全·flutter·交互
tao3556672 小时前
【用AI学前端】HTML-02-HTML 常用标签(基础)
前端·html