【发布时间】:2014-06-29 09:43:01
【问题描述】:
我想画一个这样的填充弧:
CCDrawNode 仅包含绘制圆、多边形或直线的方法——但没有弧。
明确地说,我希望能够在运行时生成具有任意半径和弧角的弧。
我的问题:
有没有办法让 Cocos2d 画一条弧线,还是我必须自己用 OpenGL 来做?
【问题讨论】:
标签: ios objective-c cocos2d-iphone
我想画一个这样的填充弧:
CCDrawNode 仅包含绘制圆、多边形或直线的方法——但没有弧。
明确地说,我希望能够在运行时生成具有任意半径和弧角的弧。
我的问题:
有没有办法让 Cocos2d 画一条弧线,还是我必须自己用 OpenGL 来做?
【问题讨论】:
标签: ios objective-c cocos2d-iphone
我猜你可以使用CCProgressNode,通过将精灵设置为橙色圆圈,你可以通过设置进度属性绘制弧线。
现在,是否可以将精灵设置为可以缩放的矢量化圆圈,我不太确定。
个人建议你把绘图弧码加到CCDrawNode,提交PR。
【讨论】:
CCProgressNode 起作用了,尽管我无法解决(也许你不能)在 CCProgressNode 中为精灵使用CCDrawNode。我的解决方法是简单地将一些圆形图像作为 PNG,然后创建一个大小合适且缩放适当的精灵。这对我目前的目的来说很好。谢谢。
CCProgressNode 中的 percentage 属性是从 0 到 100.0。
使用 cocos2dx v3.8 测试,代码来自 DrawNode::drawSolidCircle
DrawNode* Pie::drawPie(const Vec2& center, float radius, float startAngle, float endAngle, unsigned int segments, float scaleX, float scaleY, const Color4F &color){
segments++;
auto draw = DrawNode::create();
const float coef = (endAngle - startAngle) / segments;
Vec2 *vertices = new (std::nothrow) Vec2[segments];
if (!vertices)
return nullptr;
for (unsigned int i = 0; i < segments - 1; i++)
{
float rads = i*coef;
GLfloat j = radius * cosf(rads + startAngle) * scaleX + center.x;
GLfloat k = radius * sinf(rads + startAngle) * scaleY + center.y;
vertices[i].x = j;
vertices[i].y = k;
}
vertices[segments - 1].x = center.x;
vertices[segments - 1].y = center.y;
draw->drawSolidPoly(vertices, segments, color);
CC_SAFE_DELETE_ARRAY(vertices);
return draw;
}
这样称呼
auto pie = Pie::drawPie(_visibleSize / 2, _visibleSize.width / 4, 0, 1, 999, 1, 1, Color4F::BLUE);
【讨论】: