我使用SDL_RenderDrawPoint()进行了实验,通过在圆上绘制圆来绘制圆。为此,我使用正弦函数和余弦函数(cos(v),sin(v))和for循环每次绘制每个点一次来表达它们的位置(x,y)。有1080个迭代和几个if语句,我做了三个圆圈。使用三角函数绘制点的圆。 SDL2
功能:
void DotCircle::DrawCircle()
{
if (draw)
{
Position = { 500.f, 500.f };
SDL_Point start;
start.x = Position.m_x;
start.y = Position.m_y;
SDL_SetRenderDrawColor(drawmgr->getRenderer(), 0xFF, 0x00, 0xFF, 0xFF);
for (size_t i = 0; i < 1080; i++)
{
if (i < 360)
{
SDL_RenderDrawPoint(drawmgr->getRenderer(), start.x + 300 * cos(i), start.y + 300 * sin(i));
}
if (i > 360)
{
SDL_RenderDrawPoint(drawmgr->getRenderer(), start.x + 200 * cos(i), start.y + 200 * sin(i));
}
if (i > 720)
{
SDL_RenderDrawPoint(drawmgr->getRenderer(), start.x + 100 * cos(i), start.y + 100 * sin(i));
}
}
}
}
的问题当然是为圆半径变大它们之间的较大的房间,但我的问题是:我可以让各界更流畅使用这种技术,如果是这样,我该怎么做?
图片:
这改善了很多圈子。现在我使用一个浮点数并在循环中向我添加0.1 * PI/180(PI = 3.141592653)。 if语句也被转换为弧度。但是,可以做些什么来提高效率?我正在考虑将点推入容器并从另一个地方抽取它们,或者以某种方式控制帧速率。 我有一个正方形在绘制圆圈时移动时会滞后很多 – Orrexon 2014-10-01 21:47:07
我已经给我的答案添加了一些建议。 – 2014-10-01 22:25:39