微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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


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


1.概述

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


2.CCDrawingPrimitives(原生绘图)


2.1.特点

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

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


2.2.API

  1. //绘制一个给定x,y值的点
  2. voidCC_DLLccDrawPoint(constCCPoint&point);
  3. //绘制一组点
  4. voidCC_DLLccDrawPoints(constCCPoint*points,unsignedintnumberOfPoints);
  5. //绘制一条给定起始点和目标点的直线
  6. voidCC_DLLccDrawLine(constCCPoint&origin,constCCPoint&destination);
  7. //绘制一个给定起始点和目标点的矩形
  8. voidCC_DLLccDrawRect(CCPointorigin,CCPointdestination);
  9. //绘制一个给定起始点和目标点和颜色的矩形
  10. voidCC_DLLccDrawSolidRect(CCPointorigin,CCPointdestination,ccColor4Fcolor);
  11. //绘制一个给定一组点的多边形,可以是闭合或开放
  12. voidCC_DLLccDrawpoly(constCCPoint*vertices,87); font-weight:bold; background-color:inherit">intnumOfVertices,boolclosepolygon);
  13. //绘制一个给定一组点和颜色的多边形
  14. voidCC_DLLccDrawSolidpoly(constCCPoint*poli,87); font-weight:bold; background-color:inherit">intnumberOfPoints,0); background-color:inherit">//绘制一个给定中心,半径,分段数的圆
  15. voidCC_DLLccDrawCircle(constCCPoint&center,87); font-weight:bold; background-color:inherit">floatradius,87); font-weight:bold; background-color:inherit">floatangle,87); font-weight:bold; background-color:inherit">intsegments,87); font-weight:bold; background-color:inherit">booldrawLinetoCenter,87); font-weight:bold; background-color:inherit">floatscaleX,87); font-weight:bold; background-color:inherit">floatscaleY);
  16. booldrawLinetoCenter);
  17. //绘制一个一个控制点的贝塞尔曲线(二次)
  18. voidCC_DLLccDrawQuadBezier(constCCPoint&control,153); font-weight:bold; background-color:inherit">constCCPoint&destination,87); font-weight:bold; background-color:inherit">intsegments);
  19. //绘制一个带两个控制点的贝塞尔曲线(高阶)
  20. voidCC_DLLccDrawCubicBezier(constCCPoint&control1,153); font-weight:bold; background-color:inherit">constCCPoint&control2,87); font-weight:bold; background-color:inherit">intsegments);
  21. //绘制认曲率的基数样条
  22. voidCC_DLLccDrawCatmullRom(CCPointArray*arrayOfControlPoints,0); background-color:inherit">//绘制指定曲率的基数样条
  23. voidCC_DLLccDrawCardinalSpline(CCPointArray*config,87); font-weight:bold; background-color:inherit">floattension,0); background-color:inherit">//设置绘制颜色,4个byte型
  24. voidCC_DLLccDrawColor4B(glubyter,glubyteg,glubyteb,glubytea);
  25. //设置绘制颜色,4个float型
  26. voidCC_DLLccDrawColor4F(GLfloatr,GLfloatg,GLfloatb,GLfloata);
  27. //设置点大小,认为1
  28. voidCC_DLLccPointSize(GLfloatpointSize);

2.3.示例

代码使用的是TestCpp中代码



3.CCDrawNode(绘图节点)


3.1.特点

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

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

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

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


3.2.API

copy
    //绘制一个指定位置,大小,颜色的点
  1. voiddrawDot(constCCPoint&pos,153); font-weight:bold; background-color:inherit">constccColor4F&color);
  2. //绘制一个指定起点终点,大小,颜色的点
  3. voiddrawSegment(constCCPoint&from,153); font-weight:bold; background-color:inherit">constCCPoint&to,153); font-weight:bold; background-color:inherit">constccColor4F&color);
  4. //绘制一个指定点,填充颜色,边框颜色的,边框宽度的多边形
  5. voiddrawpolygon(CCPoint*verts,87); font-weight:bold; background-color:inherit">intcount,153); font-weight:bold; background-color:inherit">constccColor4F&fillColor,87); font-weight:bold; background-color:inherit">floatborderWidth,153); font-weight:bold; background-color:inherit">constccColor4F&borderColor);

3.3.示例

代码也是TestCpp中的代码




4.源码下载

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

原文地址:https://www.jb51.cc/cocos2dx/342125.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐