精通Cocos2d-x游戏开发(进阶卷)
上QQ阅读APP看书,第一时间看更新

11.3 渲染接口详解

DrawNode提供的渲染接口与DrawingPrimitives基本一致,它们支持绘制点、线段、多边形等图元,由于DrawingPrimitives即将被废弃,所以这里只介绍DrawNode提供的绘制接口。

11.3.1 绘制点

      /** 传入Vec2坐标、点的尺寸和颜色参数,绘制一个点 */
      void drawPoint(const Vec2& point, const float pointSize, const Color4F
      &color);
      /** 传入Vec2坐标数组、数组长度以及颜色参数,绘制一系列点 */
      void drawPoints(const Vec2 *position, unsigned int numberOfPoints, const
      Color4F &color);
      /** 传入Vec2坐标数组、数组长度、点的尺寸以及颜色参数,绘制一系列点 */
      void drawPoints(const Vec2 *position, unsigned int numberOfPoints, const
      float pointSize, const Color4F &color);

11.3.2 绘制线段、矩形、多边形与圆形

      /** 传入两个坐标、一个颜色参数,绘制一条线段 */
      void drawLine(const Vec2 &origin, const Vec2 &destination, const Color4F
      &color);
      /** 传入两个坐标、一个颜色参数,绘制一个矩形 */
      void drawRect(const Vec2 &origin, const Vec2 &destination, const Color4F
      &color);
      /** 传入Vec2坐标数组、数组长度、是否闭合以及颜色参数,绘制一个多边形
        closePolygon参数为true时多边形闭合,false多边形不闭合 */
      void  drawPoly(const  Vec2  *poli,  unsigned  int  numberOfPoints,  bool
      closePolygon, const Color4F &color);
      /** 根据圆心、半径、角度(一般为0)、分段(越高越精细)、drawLineToCenter选项、x
      和y轴的缩放比例、颜色等参数绘制一个圆,drawLineToCenter参数为true时会从圆心到每
      个分段绘制一条线段 */
      void drawCircle( const Vec2& center, float radius, float angle, unsigned
      int segments, bool drawLineToCenter, float scaleX, float scaleY, const
      Color4F &color);
      /** 根据圆心、半径、角度(一般为0)、分段(越高越精细)、drawLineToCenter选项、颜
      色等参数绘制一个圆
        */
      void drawCircle(const Vec2 &center, float radius, float angle, unsigned int
      segments, bool drawLineToCenter, const Color4F &color);

11.3.3 绘制贝塞尔曲线

      /** 传入起点坐标、控制点坐标、终点坐标、分段以及颜色,绘制一条贝塞尔曲线 */
      void drawQuadBezier(const Vec2 &origin, const Vec2 &control, const Vec2
      &destination, unsigned int segments, const Color4F &color);
      /** 传入起点坐标、两个控制点坐标、终点坐标、分段以及颜色,绘制一条贝塞尔曲线 */
      void drawCubicBezier(const Vec2 &origin, const Vec2 &control1, const Vec2
      &control2, const Vec2 &destination, unsigned int segments, const Color4F
      &color);

11.3.4 绘制CardinalSpline

      /** 传入一系列点、张力、分段以及颜色来绘制一条基数样条曲线 */
      void drawCardinalSpline(PointArray *config, float tension,  unsigned int
      segments, const Color4F &color);

使用drawCardinalSpline绘制一条线段,如图11-2演示了当设置了不同的张力参数时,线段的表现。以下4张图片设置的张力依次为0.1、0.5、1.0和2.0。

图11-2 不同张力下的CardinalSpline

11.3.5 绘制凯特摩曲线

      /** 传入一系列点、分段以及颜色,绘制一条凯特摩曲线 */
      void drawCatmullRom(PointArray *points, unsigned int segments, const Color4F
      &color);

如图11-3使用了与图11-2一样的线段参数,演示了凯特摩曲线的绘制。

图11-3 凯特摩曲线

11.3.6 绘制实心图元

      /** 传入一个坐标、半径以及颜色,绘制一个圆点 */
      void drawDot(const Vec2 &pos, float radius, const Color4F &color);

      /** 传入4个坐标和颜色,绘制一个四边形 */
      void drawRect(const Vec2 &p1, const Vec2 &p2, const Vec2 &p3, const Vec2&
      p4, const Color4F &color);

      /** 传入起始和结束坐标以及颜色,绘制一个实心矩形 */
      void drawSolidRect(const Vec2 &origin, const Vec2 &destination, const
      Color4F &color);
      /** 传入一系列点和颜色,绘制一个实心多边形 */
      void drawSolidPoly(const Vec2 *poli, unsigned int numberOfPoints, const
      Color4F &color);
      /** 传入圆心、半径、角度、分段、x和y轴的缩放值以及颜色参数,绘制一个实心圆 */
      void drawSolidCircle(const Vec2& center, float radius, float angle, unsigned
      int segments, float scaleX, float scaleY, const Color4F &color);
      /** 传入圆心、半径、角度、分段以及颜色参数,绘制一个实心圆 */
      void drawSolidCircle(const Vec2& center, float radius, float angle, unsigned
      int segments, const Color4F& color);
      /** 传入起点、终点、半径以及颜色,绘制一个弓形片段 */
      void drawSegment(const Vec2 &from, const Vec2 &to, float radius, const
      Color4F &color);
      /** 传入一系列点、填充颜色、边框宽度、边框颜色,绘制一个带边框的实心多边形 */
      void drawPolygon(const Vec2 *verts, int count, const Color4F &fillColor,
      float borderWidth, const Color4F &borderColor);
      /** 传入3个坐标以及一个颜色,绘制一个三角形*/
      void drawTriangle(const Vec2 &p1, const Vec2 &p2, const Vec2 &p3, const
      Color4F &color);