【发布时间】:2022-10-14 06:56:08
【问题描述】:
所以我找到了一些代码来画一个圆圈,将它添加到我的项目中,然后我尝试使用它 annndddd .. 我的程序永远不会停止,使用几乎所有空闲内存,并且确实没有什么(我可以看到)这是我的整个 c++ 应用程序,没有其他脚本或任何东西:
#include <SDL.h>
#include <stdio.h>
#undef main
//Draw A Circle
void DrawCircle(SDL_Renderer* renderer, int x, int y, int radius)
{
int offsetx, offsety, d;
offsetx = 0;
offsety = radius;
d = radius - 1;
while (offsety >= offsetx) {
SDL_RenderDrawPoint(renderer, x + offsetx, y + offsety);
SDL_RenderDrawPoint(renderer, x + offsety, y + offsetx);
SDL_RenderDrawPoint(renderer, x - offsetx, y + offsety);
SDL_RenderDrawPoint(renderer, x - offsety, y + offsetx);
SDL_RenderDrawPoint(renderer, x + offsetx, y - offsety);
SDL_RenderDrawPoint(renderer, x + offsety, y - offsetx);
SDL_RenderDrawPoint(renderer, x - offsetx, y - offsety);
SDL_RenderDrawPoint(renderer, x - offsety, y - offsetx);
if (d >= 2 * offsetx) {
d -= 2 * offsetx + 1;
offsetx += 1;
}
else if (d < 2 * (radius - offsety)) {
d += 2 * offsety - 1;
offsety -= 1;
}
else {
d += 2 * (offsety - offsetx - 1);
offsety -= 1;
offsetx += 1;
}
}
}
//Main Loop
int main(int argc, char** args)
{
//Initialize everything
SDL_Init(SDL_INIT_EVERYTHING);
//Setting up window and renderer
SDL_Window* window = SDL_CreateWindow("Hmm", 200, 200, 800, 600, SDL_WINDOW_SHOWN);
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, 0);
//Draw A Circle, Update the surface, and wait 10 seconds then close the program
DrawCircle(renderer, 200, 200, 100);
SDL_UpdateWindowSurface;
SDL_Delay(10000);
//Flushes memory and closes program/window
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
(也随时提供任何可能加快速度的建议或事情)
【问题讨论】:
-
while (x >= y)这个循环显然永远不会停止,x和y都不会改变。 -
嗯,那我该如何解决呢?
-
找到了一个更新的版本,虽然还是不行
-
对于任何实际操作而言,逐像素绘图不太可能足够快。尝试使用新添加的
SDL_RenderGeometry来渲染具有足够大 N 的 n 边形,使其看起来像一个圆。 -
哦!谢谢,我去看看