原理即将一条曲线分割成多个线段,以显示成曲线的样子。
本算法转载自如何制作一个类似Tiny Wings的游戏 Cocos2d-x 2.1.4
void drawCurves(CCPoint p0, CCPoint p1, void (*drawFunc)(CCPoint, CCPoint))
{
#define kSegmentWidth 8
int segment = floorf((p1.x - p0.x) / kSegmentWidth);
//两点y坐标的中间点
float yMid = (p1.y + p0.y) / 2;
//两点在y轴上的距离的一半
float ampl = (p1.y - p0.y) / 2;
CCPoint pt0, pt1;
float dx = (p1.x - p0.x)/segment;
pt0 = p0;
//曲线的点的运算皆需要以(p0.x, yMid)为参照
for(int i = 0; i < segment + 1; i++)
{
pt1.x = p0.x + i * dx;
pt1.y = yMid + ampl * cosf(M_PI * i /segment);
drawFunc(pt0, pt1);
pt0 = pt1;
}
}