当前位置: 首页 > news >正文

小伙伴说我的拼图游戏用Mask不能合批...

引言

哈喽大家好,我是亿元程序员。

不知道小伙伴们还记不记得笔者上次通过Mask实现拼图游戏的圆角效果。

那期文章一发出去就收到了很多小伙伴们的评论,其中呼声比较高的:

当然也有很多小伙伴说现在手机性能都相对来说比较高了,没必要纠结手表能不能玩:

笔者觉得还是可以优化一下的,不然写文章都没有素材了,建议大家不要学。

言归正传,本期带大家一起来看看,在Cocos游戏开发中,如何通过Shader实现能够合批的拼图游戏,将DC从400多降到个位数

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

回顾一下

上期笔者讲解了如何通过Mask实现圆角拼图,有很多小伙伴提出了不能合批的问题,先简单科普一下:

合批就是将多个需要绘制的图形元素合并在一起,然后一次性提交给GPU进行渲染。

这样做可以显著减少CPU调用图形API绘制命令的次数,也就是降低DrawCall

笔者把上一次的拼图改成10*10,也就是100张拼图时,DC高达404,差点就找不到了:

**怎么来的?**我们简单分析一下:

其中:

  • Mask2个。

  • Sprite1个。

  • Graphics:1个。

所以总数高达4*100,也就是400DC

那我们要怎么才能合批,把DC降下来?

不用Mask

既然MaskGraphics占大头,我们只能换个方式了。

上期我们讲到,实现圆角效果除了Mask以外,还可以通过Shader或者自定义Mesh来完成,本期我们通过Shader来完成。

如上图通过Shader实现圆角效果的原理也比较简单,把拼图块分成以下4个部分:

  • 1.图片部分:保留原图片纹理。

  • 2.白框部分:设置白色。

  • 3.黑框部分:设置黑色。

  • 4.框外部分:设置透明。

我们只需要通过距离判断当前像素处于以上4个部分的哪一个部分,即可完成Shader的编写。

下面我们一起来进行圆角Shader实战。

圆角Shader实战

下面开始实战,本次实战不代表最优解,欢迎小伙伴们评论区一起探讨,这部分比较枯燥,小伙伴们可以直接拉进度条

1.创建Shader

我们依旧在资源管理器中搜素sprite,找到builtin-sprite这个Shader,然后Ctrl+C/V到我们的assets目录下。

2.添加properties

想要计算像素处于哪一部分,我们需要通过一些列的参数来计算判断。

3.定义uniform

在片段着色器中接收参数(是否圆角、是否有边框、uv范围、纹理大小、圆角半径、黑框宽、白框宽、黑框内嵌等等)。

4.计算各层的边界位置

在片段着色器中计算各层的边界位置:

  • 黑框外层边界(最外层):

  • 黑框内层边界(白框外边界):

  • 图片层边界(白框内边界):

5.计算各层的中心点和半尺寸

计算各层的中心点和半尺寸,同时计算各层的圆角半径。

6.计算当前像素到各层边界的距离

通过SDF方法计算出像素到各层边界的距离。

得出像素处于哪一层:

7.根据距离判断像素属于哪一层,并设置颜色

最后根据距离判断像素属于哪一层,并设置颜色,即可完成对应的效果。

8.应用

创建材质并且应用到sprite

最后我们通过Pass直接设置uniform完成参数的传递。

9.效果演示

一顿操作猛如虎,通过上述的操作,我们成功去掉了MaskGraphics画线,DC也成功降了下来:

虽然DC已经是之前的四分之一,但是拼图碎片之间为什么没有合批?

材质不同

根据合批的要求,需要相同的材质和纹理,从上面来看,虽然我们用的是同一张纹理,但是材质是单个碎片单独new出来的:

因此首要的第一步,我们需要把材质改成同一个。

1.共享材质

声明一个静态的唯一的材质sharedMaterial

2.提取公共常量

公共的,所有碎片都一致的变量,还是按照原方式传递,不会打断合批。

3.特殊部分

对于每个碎片的边和圆角标志,因为它们都不相同,如果使用同一个材质,通过原方式传递,会导致所有的碎片的边框一样。

这里我们借助sprite.color去传递这部分参数,不会打断合批。

4.color通道中解码数据

解码标志位,拿到我们传递的参数。

5.效果演示

拿到参数后,圆角和边框算法和原来保持一致,运行后即可看到我们的效果,DC成功降到了个位数。

完整效果

结语

以上就是通过Shader实现能够合批的拼图游戏的实战,不知道我说明白没有。

一个拼图游戏都出了这么多期了,还有什么素材可以继续?

本文实战完整源码已加更到亿元Cocos小游戏实战合集(8/10),不占份数,已经拥有的小伙伴可以直接更新。


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

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

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

推荐文章:

亿元Cocos小游戏实战合集

俄罗斯方块谁不会做…啊?流沙版?

最近很火的一个拼图游戏,老板让我用Cocos3.8做一个…

老板说拼图游戏太卷了,让我用Cocos做个3d版本的…

敢不敢挑战用Cocos3.8复刻曾经很火的割绳子游戏?

Cocos游戏如何接入安卓穿山甲广告变现?

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

Cocos游戏如何快速接入抖音小游戏广告变现?

http://www.jsqmd.com/news/428662/

相关文章:

  • 2026年SAT高效提分培训机构推荐:哪家SAT培训机构提分快? - 品牌2026
  • 2026年弯曲扭转试验机行业权威推荐:技术实力与市场口碑双优企业榜单 - 深度智识库
  • 2026年度中国锻造后加工优质厂家推荐:精密锻件CNC车铣一体化解决方案与质量管控榜单 - 余文22
  • 基于TMS320F2812的交流异步电动机直接转矩系统设计与仿真
  • 售后无忧:这些氨气分析仪厂家的售后服务最值得信赖 - 品牌推荐大师1
  • 2026年吨包袋厂家推荐:唐山吴晨嘉科技,白色/聚丙烯/大容量/装卸吨包袋全系供应 - 品牌推荐官
  • 阿里云代理商:阿里云 DAS 三招搞定数据库存储空间不足
  • 太原周边净水器厂家探访:综合实力与服务质量分析,全屋净水系统/医院净水设备/山西净水工程,净水器公司排行榜单 - 品牌推荐师
  • 2026年3月拉力试验机厂家推荐优质品牌实力甄选 - 深度智识库
  • 学校、医院、办公楼玻璃隔热:守护健康与效率 - 包罗万闻
  • 2026 年售楼部门楼整装、金属大门、小区廊架、不锈钢结构装饰工程核心品牌厂家排行榜 - 品牌企业推荐师(官方)
  • 2026年全球高端咖啡机冲煮头与粉碗配件生产商:食品级不锈钢CNC加工厂家推荐 - 余文22
  • 2026年企微服务热线电话多少?联系方式更新,一键直达人工客服 - 品牌2026
  • 阳光房、办公室、工厂、别墅玻璃隔热:定制理想生活环境 - 包罗万闻
  • 复现《磨削减薄工艺下硅晶圆强度的实验研究》的数据分析与威布尔分布拟合
  • 2026年怎么选阿里企业邮箱代理商?一站式选购指南 - 品牌2026
  • 2026SAT高分培训机构推荐:SAT快速提分的补习机构与快速出分机构精选 - 品牌2026
  • 2026年3月英联翻译公司(INLION Translation)服务对接:官方联系方式全汇总 - 品牌企业推荐师(官方)
  • 支持linux的编程语言对比
  • 2026年拉力试验机选购指南:深度解析市场格局与实力厂家推荐 - 深度智识库
  • 2026年云南挖掘机发动机公司口碑排行榜,权威榜单揭晓 - 睿易优选
  • Vue
  • 2026年植保无人机喷嘴加工厂家推荐:耐农药腐蚀塑料与不锈钢精密零件定制指南 - 余文22
  • 2026年井盖,雨篦,篦子,排水沟等核心品牌排行榜:全场景适配与技术创新权威解析 - 品牌企业推荐师(官方)
  • 2026年电子万能/拉力/压力/弯曲扭转/疲劳试验机厂家推荐优质品牌精选 - 深度智识库
  • 2026年全国水溶肥哪家厂家优质? 适配大田与经济作物种植 满足个性化种植需求 - 深度智识库
  • 2026年国内试验机优选指南:聚焦电子万能/拉力/压力/弯曲扭转/疲劳试验机实力厂家解析与推荐 - 深度智识库
  • 2026年油田除泥器、油田除砂器 、旋流器、旋流子核心品牌排行榜:全场景适配与技术创新权威解析 - 品牌企业推荐师(官方)
  • 2026年压力试验机厂家综合实力排行榜:行业洞察与优质厂商推荐 - 深度智识库
  • 打破同源枷锁:深入理解 postMessage 跨域通信机制