上下文
我试着在我的游戏中绘制饼图以供统计。我使用Cocos2d-x ver.3.8.1。游戏的大小很重要,所以我不会使用第三方框架来创建饼图。
问题
在Cocos2d-x中,我找不到任何合适的方法来绘制圆的一部分。
我试着做
我试图在互联网上找到解决这个问题的办法,但没有成功。
众所周知,圆的扇形=三角形+段。因此,我也尝试使用来自DrawNode的方法DrawNode。虽然它有参数radius (用API参考写成的“段半径”),但radius只影响直线的厚度。drawSegment()方法绘制一条简单的直线,其厚度由方法调用来设置。
问题
请提示我,如何在Cocos2d-x中画一个分段或一个圆的扇形?如有任何建议将不胜感激,谢谢。
发布于 2015-12-22 15:21:02
我认为在Cocos2d-X中绘制圆扇区的方法之一是在DrawNode上使用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);

结果会是这样。我想密码会帮你解决问题。
https://stackoverflow.com/questions/34337684
复制相似问题