《Cocos2D-x权威指南》——3.9 绘制图形-阿里云开发者社区

开发者社区> 华章出版社> 正文
登录阅读全文

《Cocos2D-x权威指南》——3.9 绘制图形

简介: 本节书摘来自华章计算机《Cocos2D-x权威指南》一书中的第3章,第3.9节,作者:满硕泉著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

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所示。

image

注意 Cocos2D-x提供的绘制图形函数里没有绘制实心圆形的函数。需要绘制实心圆形时,请将ccDrawCircle函数(在CCDrawingPrimitives.cpp文件中)调用glDrawArrays函数时的第一个参数由GL_LINE_STRP改为GL_TRIANGLE_FAN即可。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: