【包教包会】CocosCreator Assembler经典案例第二期——圆角矩形(支持原生、可合批、附Demo源码)

本文详细介绍了如何在CocosCreator2.4.13中使用RoundBox组件实现圆角效果,包括获取方法、算法思路、顶点计算、UV坐标和颜色设置。作者提供包教包会的指导,欢迎留言讨论。
摘要由CSDN通过智能技术生成

一、效果演示

image

二、如何获取

1、https://gitee.com/szrpf/RoundBox

2、解压,导入cocos creator(版本2.4.13),可以直接运行Demo演示

3、单独复制Demo中的RoundBox.ts到自己项目中

新建一个空节点并添加RoundBox组件,拖一张图片到SpriteFrame里就可以使用了,和cc.Sprite差不多。

image

三、算法思路

默认情况下,一张图片4个角,每个角1个顶点。

顶点

如上图,增加顶点数量,并且等间距圆弧分布,就可以实现圆角效果。

顶点数越多,圆角弧度越平滑,但计算量也越大,具体看项目需求。

属性面板设计如下:

image

可以单独设置每个圆角的可见性。

image

为了方便计算,可以把矩形拆成5块:中间、左下、右下、左上、右上
假设:
圆角半径 :R
线段数量:S
有几个角可见:N
1)计算顶点数量和三角形数量

image

中间的顶点数 = 12,三角形数量 = 6

image

每个角顶点数 = S - 1(其余顶点都在中间的结构上,已经算过了)
三角形数量 = S

image

如果该角不可见,那么这个角:
顶点数 = 0(只是把中间结构的点移出去,并没有增加顶点数)
三角形数 = 0
因此,顶点数量 = 12 + N * (S - 1)
三角形数量 = 6 + N * S

2)计算顶点坐标
Step 1:计算图片左下、右下、左上、右上4个边缘

image

根据图片宽高、锚点很容易计算

Step 2:计算中间结构的顶点坐标

image

根据Step 1的结果,以及圆角半径,计算4个圆角圆心坐标
然后算出其余点坐标。

Step 3:计算圆角顶点坐标

image

由于每个圆角顶点均匀分布在90度圆弧上,因此夹角α = 90 / S
每个顶点坐标 = 上一个顶点绕圆心转α角度

image

根据任意点P绕O旋转的公式,计算圆角顶点坐标。

3)计算顶点UV

image

根据UV的定义,UV坐标系的原点O是图片左上角,坐标(Ox, Oy)UV(0, 0)
任意顶点P坐标(Px, Py)UV(Pu, Pv)

Pu = (Px - Ox) / 图片宽度
Pv = (图片高度 - Py - Oy) / 图片高度

4)计算顶点颜色

image

所有顶点颜色都 = 节点颜色就可以

5)计算顶点顺序

image

中间结构的点序是固定的,在纸上画一下就可以得到,不需要计算。
4个角的点序:从圆心开始逆时针排序

点序没有固定的规则,看个人喜好,但尽量有规律性,方便计算。
其余模块比较公式化,之前的教程已经实现过了,照搬过来就可以。

四、结束语

有不明白的,或者优化建议,可以留言评论,或给我发邮件!

包教包会,你会了吗?

创作不易,请多留言讨论,这样我会有动力发更多好玩的东西上来。

Gitee地址:水煮肉片饭 (szrpf) - Gitee.com

EMail地址:27185709@qq.com

推荐链接:

1、【包教包会】操控顶点的大师——CocosCreator Assembler保姆级教程

2、【包教包会】CocosCreator Assembler经典案例第一期——2D实现3D透视翻转

3、权重随机算法,解决游戏中一切可控随机(刷怪、掉宝、转盘、抽卡等等)

4、【包教包会】对CocosCreator拖尾组件MotionStreak做了全面优化

5、【包教包会】重写CocosCreator的按钮Button组件,动画、音效、回调逻辑优化

mi

  • 19
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值