改写cocos2d的ProgressTimer实现任意起始点的Radial进度条

解释一下要做的事:

原生ProgressTimer控件的进度起始点只能是在(0.5,1)的位置,如下:

我们要改成可以将矩形边上的任意点作为起始点,如下: 

 首先讲一下绘制的逻辑:

先根据起始点向量算出旋转到一定角度后的向量,再算一下旋转过程中经过的矩形顶点,把起点、终点和矩形顶点,都和旋转中心点(下图中的0点)连接成一个个相邻的三角形,用纹理颜色绘制这些三角形即可。如下:

 

  •  改动了CCProgressTimer.h和CCProgressTimer.cpp可以直接下载。
  • 下面我们解析一下实现过程中需要掌握的几个技术要点:
    1. 求一个向量旋转一定角度后的向量,(二维旋转矩阵)
    2. 射线相交算法
    3. OpenGL的顶点缓冲区VBO索引缓冲区EBO在cocos中的用法
    4. 根据Sprite局部坐标系内的某点坐标,如何算出这个点的顶点坐标和纹理坐标

猜你喜欢

转载自blog.csdn.net/u012861978/article/details/131292883