【玩转cocos2d-x之三十四】绘图:CCDrawingPrimitives和CCDrawNode

前端之家收集整理的这篇文章主要介绍了【玩转cocos2d-x之三十四】绘图:CCDrawingPrimitives和CCDrawNode前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

原创作品,转载请标明:@H_502_3@http://www.jb51.cc/article/p-ymoegwlq-ep.html
@H_502_3@


最近忙出翔了,这年过的也揪心。好久没来更新博客了,今天就来写一写cocos2d-x中图形的绘制。@H_502_3@


@H_502_3@

1.概述@H_502_3@

其实cocos2d-x封装了大量的opengl的绘图函数,我们可以很轻松的在游戏中调用。但是实际上我们很少会这么做,因为编码绘图的方式效率实在太低了,尤其是诸如一些高阶贝塞尔曲线之类的,官方也不建议这么做,使用图像能更有效的提高绘图效率,同时也会更为的美观,也减少了一些精灵遮挡问题和边缘锯齿问题。cocos2d-x中绘图主要有两种方式:CCDrawingPrimitives和CCDrawNode。它们都在cocos2dx\draw_nodes目录下。@H_502_3@


@H_502_3@

2.CCDrawingPrimitives(原生绘图)@H_502_3@


@H_502_3@

2.1.特点@H_502_3@

CCDrawingPrimitives必须在节点的draw函数调用,draw函数每帧被调用一次,主要做一些绘制的工作。但这并不意味着它就是静态不可改变的,我们完全可以通过修改描绘内容的方式来动态绘图。比如可以直接在用触摸的方式在屏幕上绘图。@H_502_3@

另外,使用CCDrawingPrimitives绘图默认的Z-Order是0,所以可能会被其他节点覆盖,因为它无法设置Z-Order,所以只能通过设置其他节点的Z-Order为负值使得绘图在最前端得以看见。@H_502_3@


@H_502_3@

2.2.API@H_502_3@

@H_502_3@

  1. //绘制一个给定x,y值的点@H_502_3@@H_502_3@@H_502_3@
  2. void@H_502_3@CC_DLLccDrawPoint(@H_502_3@const@H_502_3@CCPoint&point);@H_502_3@@H_502_3@
  3. @H_502_3@
  4. //绘制一组点@H_502_3@@H_502_3@@H_502_3@
  5. void@H_502_3@CC_DLLccDrawPoints(@H_502_3@const@H_502_3@CCPoint*points,unsigned@H_502_3@int@H_502_3@numberOfPoints);@H_502_3@@H_502_3@
  6. @H_502_3@
  7. //绘制一条给定起始点和目标点的直线@H_502_3@@H_502_3@@H_502_3@
  8. void@H_502_3@CC_DLLccDrawLine(@H_502_3@const@H_502_3@CCPoint&origin,@H_502_3@const@H_502_3@CCPoint&destination);@H_502_3@@H_502_3@
  9. //绘制一个给定起始点和目标点的矩形@H_502_3@@H_502_3@@H_502_3@
  10. void@H_502_3@CC_DLLccDrawRect(CCPointorigin,CCPointdestination);@H_502_3@@H_502_3@
  11. //绘制一个给定起始点和目标点和颜色的矩形@H_502_3@@H_502_3@@H_502_3@
  12. void@H_502_3@CC_DLLccDrawSolidRect(CCPointorigin,CCPointdestination,ccColor4Fcolor);@H_502_3@@H_502_3@
  13. //绘制一个给定一组点的多边形,可以是闭合或开放@H_502_3@@H_502_3@@H_502_3@
  14. void@H_502_3@CC_DLLccDrawPoly(@H_502_3@const@H_502_3@CCPoint*vertices,87); font-weight:bold; background-color:inherit">int@H_502_3@numOfVertices,@H_502_3@bool@H_502_3@closePolygon);@H_502_3@@H_502_3@
  15. //绘制一个给定一组点和颜色的多边形@H_502_3@@H_502_3@@H_502_3@
  16. void@H_502_3@CC_DLLccDrawSolidPoly(@H_502_3@const@H_502_3@CCPoint*poli,87); font-weight:bold; background-color:inherit">int@H_502_3@numberOfPoints,0); background-color:inherit">//绘制一个给定中心,半径,分段数的圆@H_502_3@@H_502_3@@H_502_3@
  17. void@H_502_3@CC_DLLccDrawCircle(@H_502_3@const@H_502_3@CCPoint&center,87); font-weight:bold; background-color:inherit">float@H_502_3@radius,87); font-weight:bold; background-color:inherit">float@H_502_3@angle,87); font-weight:bold; background-color:inherit">int@H_502_3@segments,87); font-weight:bold; background-color:inherit">bool@H_502_3@drawLineToCenter,87); font-weight:bold; background-color:inherit">float@H_502_3@scaleX,87); font-weight:bold; background-color:inherit">float@H_502_3@scaleY);@H_502_3@@H_502_3@
  18. bool@H_502_3@drawLineToCenter);@H_502_3@@H_502_3@
  19. //绘制一个带一个控制点的贝塞尔曲线(二次)@H_502_3@@H_502_3@@H_502_3@
  20. void@H_502_3@CC_DLLccDrawQuadBezier(@H_502_3@const@H_502_3@CCPoint&control,153); font-weight:bold; background-color:inherit">const@H_502_3@CCPoint&destination,87); font-weight:bold; background-color:inherit">int@H_502_3@segments);@H_502_3@@H_502_3@
  21. //绘制一个带两个控制点的贝塞尔曲线(高阶)@H_502_3@@H_502_3@@H_502_3@
  22. void@H_502_3@CC_DLLccDrawCubicBezier(@H_502_3@const@H_502_3@CCPoint&control1,153); font-weight:bold; background-color:inherit">const@H_502_3@CCPoint&control2,87); font-weight:bold; background-color:inherit">int@H_502_3@segments);@H_502_3@@H_502_3@
  23. //绘制默认曲率的基数样条@H_502_3@@H_502_3@@H_502_3@
  24. void@H_502_3@CC_DLLccDrawCatmullRom(CCPointArray*arrayOfControlPoints,0); background-color:inherit">//绘制指定曲率的基数样条@H_502_3@@H_502_3@@H_502_3@
  25. void@H_502_3@CC_DLLccDrawCardinalSpline(CCPointArray*config,87); font-weight:bold; background-color:inherit">float@H_502_3@tension,0); background-color:inherit">//设置绘制颜色,4个byte型@H_502_3@@H_502_3@@H_502_3@
  26. void@H_502_3@CC_DLLccDrawColor4B(GLubyter,GLubyteg,GLubyteb,GLubytea);@H_502_3@@H_502_3@
  27. //设置绘制颜色,4个float型@H_502_3@@H_502_3@@H_502_3@
  28. void@H_502_3@CC_DLLccDrawColor4F(GLfloatr,GLfloatg,GLfloatb,GLfloata);@H_502_3@@H_502_3@
  29. //设置点大小,默认为1@H_502_3@@H_502_3@@H_502_3@
  30. void@H_502_3@CC_DLLccPointSize(GLfloatpointSize);@H_502_3@@H_502_3@

2.3.示例@H_502_3@

@H_502_3@ @H_502_3@

代码使用的是TestCpp中代码。@H_502_3@


@H_502_3@


@H_502_3@

3.CCDrawNode(绘图节点)@H_502_3@


@H_502_3@

3.1.特点@H_502_3@

CCDrawNode从CCNode继承而来,是一个图形绘制的节点类,它提供了几个常用的点线面函数方便绘图,其实在之前的游戏遮罩一文中就有写过。相较于CCDrawingPrimitives,这里更推荐使用CCDrawNode,@H_502_3@

(1)它将绘图封装为普通节点的方式进行处理,符合cocos2d-x树状编程的思想,同时也避免了一些遮盖的问题。@H_502_3@

(2)不需要在draw函数调用。@H_502_3@

(3)使用批处理绘图,提高了绘图效率。@H_502_3@


@H_502_3@

3.2.API@H_502_3@

@H_502_3@

copy
    //绘制一个指定位置,大小,颜色的点@H_502_3@@H_502_3@@H_502_3@
  1. void@H_502_3@drawDot(@H_502_3@const@H_502_3@CCPoint&pos,153); font-weight:bold; background-color:inherit">const@H_502_3@ccColor4F&color);@H_502_3@@H_502_3@
  2. //绘制一个指定起点终点,大小,颜色的点@H_502_3@@H_502_3@@H_502_3@
  3. void@H_502_3@drawSegment(@H_502_3@const@H_502_3@CCPoint&from,153); font-weight:bold; background-color:inherit">const@H_502_3@CCPoint&to,153); font-weight:bold; background-color:inherit">const@H_502_3@ccColor4F&color);@H_502_3@@H_502_3@
  4. //绘制一个指定点,填充颜色,边框颜色的,边框宽度的多边形@H_502_3@@H_502_3@@H_502_3@
  5. void@H_502_3@drawPolygon(CCPoint*verts,87); font-weight:bold; background-color:inherit">int@H_502_3@count,153); font-weight:bold; background-color:inherit">const@H_502_3@ccColor4F&fillColor,87); font-weight:bold; background-color:inherit">float@H_502_3@borderWidth,153); font-weight:bold; background-color:inherit">const@H_502_3@ccColor4F&borderColor);@H_502_3@@H_502_3@

3.3.示例@H_502_3@

@H_502_3@ @H_502_3@

代码也是TestCpp中的代码。@H_502_3@


@H_502_3@


@H_502_3@


@H_502_3@

4.源码下载@H_502_3@

可以自己看TestCpp示例,也可以从这里下载:http://download.csdn.net/detail/jackyvincefu/6903357@H_502_3@

猜你在找的Cocos2d-x相关文章