解释一下要做的事:
原生ProgressTimer控件的进度起始点只能是在(0.5,1)的位置,如下:
我们要改成可以将矩形边上的任意点作为起始点,如下:
首先讲一下绘制的逻辑:
先根据起始点向量算出旋转到一定角度后的向量,再算一下旋转过程中经过的矩形顶点,把起点、终点和矩形顶点,都和旋转中心点(下图中的0点)连接成一个个相邻的三角形,用纹理颜色绘制这些三角形即可。如下:
- 改动了CCProgressTimer.h和CCProgressTimer.cpp可以直接下载。
- 下面我们解析一下实现过程中需要掌握的几个技术要点:
- 求一个向量旋转一定角度后的向量,(二维旋转矩阵)
- 射线相交算法
- OpenGL的顶点缓冲区VBO和索引缓冲区EBO在cocos中的用法
- 根据Sprite局部坐标系内的某点坐标,如何算出这个点的顶点坐标和纹理坐标