如何在Cocos2d-x中绘制一个圆的一部分?

时间:2015-12-17 15:00:18

标签: c++ cocos2d-x

上下文
我尝试在游戏中绘制统计饼图。我正在使用Cocos2d-x ver.3.8.1。游戏的大小很重要,所以我不会使用第三方框架来创建饼图 的问题
我在Cocos2d-x中找不到任何合适的方法来绘制圆的一部分 我试图
我试图在互联网上找到解决这个问题的方法,但没有成功 众所周知,圆的扇形=三角形+分段。所以,我也尝试使用drawSegment()中的DrawNode方法。 虽然它有参数radius(“段半径”写在API reference中),但半径仅影响线的粗细。 drawSegment()方法绘制一条简单的线条,其粗细由方法调用设置 的问题
请提示我,如何在Cocos2d-x中绘制一个圆段或一个圆圈? 任何建议将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:3)

我认为在Cocos2d-X中绘制圆圈扇区的方法之一是在drawPolygon上使用DrawNode的方法。我写了很少的样本。

void drawSector(cocos2d::DrawNode* node, cocos2d::Vec2 origin, float radius, float angle_degree,
                cocos2d::Color4F fillColor, float borderWidth, cocos2d::Color4F bordercolor,
                unsigned int num_of_points = 100)
{
  if (!node)
  {
    return;
  }

  const cocos2d::Vec2 start = origin + cocos2d::Vec2{radius, 0};
  const auto angle_step = 2 * M_PI * angle_degree / 360.f / num_of_points;
  std::vector<cocos2d::Point> circle;

  circle.emplace_back(origin);
  for (int i = 0; i <= num_of_points; i++)
  {
    auto rads = angle_step * i;
    auto x = origin.x + radius * cosf(rads);
    auto y = origin.y + radius * sinf(rads);
    circle.emplace_back(x, y);
  }

  node->drawPolygon(circle.data(), circle.size(), fillColor, borderWidth, bordercolor);
}

这是计算圆的边缘点的位置和绘制多边形的函数。如果你想使用它,你需要调用如下,

auto canvas = DrawNode::create();
drawSector(canvas, cocos2d::Vec2(400, 400), 100, 60, cocos2d::Color4F::GREEN, 2, cocos2d::Color4F::BLUE, 100);
this->addChild(triangle);

The result

结果就是这样。我认为代码可以帮助您解决问题。