3.9 绘制图形
在节点类CCNode中,可以重写draw函数并在其中绘制图形,如tests项目中DrawPrimitivesTest文件夹下DrawPrimitivesTest.cpp文件中的DrawPrimitivesTest类中的draw函数。
1)绘制直线。
参数分别为直线的起点和终点。如代码清单3-44所示。
代码清单3-44 绘制直线
ccDrawLine( ccp(0, 0), ccp(s.width, s.height) );
默认绘制的直线是白色的、不透明的、线宽是1并且是抗锯齿的。设置这些绘制参数后,绘制直线如代码清单3-45所示。
代码清单3-45 设置绘制参数后绘制直线
glLineWidth( 5.0f );
ccDrawColor4B(255,0,0,255);
ccDrawLine( ccp(0, s.height), ccp(s.width, 0) );
这里需要说明的是,OpenGL中是状态机,除非重新设置,否则这些参数都会保持到下一个状态。
2)绘制点。
如代码清单3-46所示,注意OpenGL中的点是正方形的。
代码清单3-46 绘制点
CCPoint points[] = { ccp(60,60), ccp(70,70), ccp(60,70), ccp(70,60) };
ccPointSize(4);
ccDrawColor4B(0,255,255,255);
ccDrawPoints( points, 4);
3)画圆。
函数的参数为圆心、半径、角度、分段数(将圆微分为直线)和是否与中心连线,如代码清单3-47所示。
代码清单3-47 画圆
glLineWidth(2);
ccDrawColor4B(0, 255, 255, 255);
ccDrawCircle( ccp(s.width/2, s.height/2), 50, CC_DEGREES_TO_RADIANS(90), 50, true);
4)画多边形。
函数的参数为点数组、点数量和图形是否封闭,如代码清单3-48所示。
代码清单3-48 画多边形
ccDrawColor4B(255, 0, 255, 255);
glLineWidth(2);
CCPoint vertices2[] = { ccp(30,130), ccp(30,230), ccp(50,200) };
ccDrawPoly( vertices2, 3, true);
5)画贝塞尔曲线。
函数的第一个参数为一个控制点,第二个和第三个参数为两个控制点,最后一个参数为分段数,如代码清单3-49所示。
代码清单3-49 画贝塞尔曲线
CHECK_GL_ERROR_DEBUG();
// draw quad bezier path
ccDrawQuadBezier(ccp(0,s.height), ccp(s.width/2,s.height/2), ccp(s.width,s.height), 50);
CHECK_GL_ERROR_DEBUG();
// draw cubic bezier path
ccDrawCubicBezier(ccp(s.width/2, s.height/2), ccp(s.width/2+30,s.height/2+50), ccp(s.width/2+60,s.height/2-50),ccp(s.width, s.height/2),100);
示例的运行效果如图3-36所示。
注意 Cocos2D-x提供的绘制图形函数里没有绘制实心圆形的函数。需要绘制实心圆形时,请将ccDrawCircle函数(在CCDrawingPrimitives.cpp文件中)调用glDrawArrays函数时的第一个参数由GL_LINE_STRP改为GL_TRIANGLE_FAN即可。