【问题标题】:Drawing Circle In SDL2 Broken在 SDL2 中绘制圆坏了
【发布时间】: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 &gt;= y) 这个循环显然永远不会停止,xy 都不会改变。
  • 嗯,那我该如何解决呢?
  • 找到了一个更新的版本,虽然还是不行
  • 对于任何实际操作而言,逐像素绘图不太可能足够快。尝试使用新添加的SDL_RenderGeometry 来渲染具有足够大 N 的 n 边形,使其看起来像一个圆。
  • 哦!谢谢,我去看看

标签: c++ sdl-2


【解决方案1】:

我最终使用了 HolyBlackCat 所说的 SDL_RenderGeometry,这似乎对我需要它有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多