如何在C++;使用SDL2? 我试图找出C++中的SDL2库,并且无法正确地配置代码来简单地将矩形绘制到屏幕上。我应该怎么做 #include <SDL.h> bool success = true; //success flag for functions, etc int ScreenWidth = 640; //screen width and height for SDL window int ScreenHeight = 480; // int main(int argc, char* argv[]) { SDL_Init(SDL_INIT_EVERYTHING); SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "1"); SDL_Window* window = SDL_CreateWindow( "Game", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, ScreenWidth, ScreenHeight, SDL_WINDOW_SHOWN); SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); SDL_SetRenderDrawColor( renderer, 0xFF, 0xFF, 0xFF, 0xFF); bool quit = false; SDL_Event event; while (!quit) { SDL_RenderClear(renderer); while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT) quit = true; } SDL_Rect box; box.w = 30; box.h = 30; box.x = 50; box.y = 50; SDL_SetRenderDrawColor(renderer, 0xFF,0x00,0x00,0xFF); SDL_RenderFillRect(renderer, &box); SDL_RenderPresent(renderer); } return 0; //because main is an int task } #包括 布尔成功=真//功能等的成功标志 int屏幕宽度=640//SDL窗口的屏幕宽度和高度 int屏幕高度=480// int main(int argc,char*argv[]) { SDL_Init(SDL_Init_EVERYTHING); SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY,“1”); SDL_Window*Window=SDL_CreateWindow(“游戏”,SDL_WINDOWPOS_未定义,SDL_WINDOWPOS_未定义,屏幕宽度,屏幕高度,显示SDL_窗口); SDL_渲染器*渲染器=SDL_CreateRenderer(窗口,-1,SDL_渲染器加速); SDL_SetRenderDrawColor(渲染器,0xFF,0xFF,0xFF,0xFF); bool-quit=false; SDL_事件; 而(!退出) { SDL_渲染器(渲染器); while(SDL_事件和事件)) { if(event.type==SDL\u QUIT) 退出=真; } SDL矩形盒; 方框w=30; 方框h=30; 框x=50; 方框y=50; SDL_SetRenderDrawColor(渲染器,0xFF,0x00,0x00,0xFF); SDL_RenderFillRect(渲染器和框); SDL_渲染器呈现(渲染器); } 返回0;//因为main是int任务 }

如何在C++;使用SDL2? 我试图找出C++中的SDL2库,并且无法正确地配置代码来简单地将矩形绘制到屏幕上。我应该怎么做 #include <SDL.h> bool success = true; //success flag for functions, etc int ScreenWidth = 640; //screen width and height for SDL window int ScreenHeight = 480; // int main(int argc, char* argv[]) { SDL_Init(SDL_INIT_EVERYTHING); SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "1"); SDL_Window* window = SDL_CreateWindow( "Game", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, ScreenWidth, ScreenHeight, SDL_WINDOW_SHOWN); SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); SDL_SetRenderDrawColor( renderer, 0xFF, 0xFF, 0xFF, 0xFF); bool quit = false; SDL_Event event; while (!quit) { SDL_RenderClear(renderer); while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT) quit = true; } SDL_Rect box; box.w = 30; box.h = 30; box.x = 50; box.y = 50; SDL_SetRenderDrawColor(renderer, 0xFF,0x00,0x00,0xFF); SDL_RenderFillRect(renderer, &box); SDL_RenderPresent(renderer); } return 0; //because main is an int task } #包括 布尔成功=真//功能等的成功标志 int屏幕宽度=640//SDL窗口的屏幕宽度和高度 int屏幕高度=480// int main(int argc,char*argv[]) { SDL_Init(SDL_Init_EVERYTHING); SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY,“1”); SDL_Window*Window=SDL_CreateWindow(“游戏”,SDL_WINDOWPOS_未定义,SDL_WINDOWPOS_未定义,屏幕宽度,屏幕高度,显示SDL_窗口); SDL_渲染器*渲染器=SDL_CreateRenderer(窗口,-1,SDL_渲染器加速); SDL_SetRenderDrawColor(渲染器,0xFF,0xFF,0xFF,0xFF); bool-quit=false; SDL_事件; 而(!退出) { SDL_渲染器(渲染器); while(SDL_事件和事件)) { if(event.type==SDL\u QUIT) 退出=真; } SDL矩形盒; 方框w=30; 方框h=30; 框x=50; 方框y=50; SDL_SetRenderDrawColor(渲染器,0xFF,0x00,0x00,0xFF); SDL_RenderFillRect(渲染器和框); SDL_渲染器呈现(渲染器); } 返回0;//因为main是int任务 },c++,sdl-2,C++,Sdl 2,编辑:这是完整的文件 我希望它在屏幕上绘制一个红色矩形,但窗口是完全红色的(大小、名称等正确,可以正确退出)。在所有渲染调用之后,必须调用SDL\u RenderPresent。在本例中,在SDL\u RenderFillRect(…) SDL_RenderClear用于在渲染循环开始时清除缓冲区 在所有渲染调用之后,必须调用SDL\u RenderPresent。在本例中,在SDL\u RenderFillRect(…) SDL_RenderClear用于在渲染循环开始时清除缓冲区 SDL\u

编辑:这是完整的文件


我希望它在屏幕上绘制一个红色矩形,但窗口是完全红色的(大小、名称等正确,可以正确退出)。

在所有渲染调用之后,必须调用
SDL\u RenderPresent
。在本例中,在
SDL\u RenderFillRect(…)

SDL_RenderClear
用于在渲染循环开始时清除缓冲区


在所有渲染调用之后,必须调用
SDL\u RenderPresent
。在本例中,在
SDL\u RenderFillRect(…)

SDL_RenderClear
用于在渲染循环开始时清除缓冲区


SDL\u SetRenderDrawColor()
影响
SDL\u RenderFillRect()
SDL\u RenderClear()

绘制红色方块后,需要在下一次调用之前将颜色重新设置为白色

#include <SDL2/SDL.h>

int main( int argc, char** argv )
{
    SDL_Init( SDL_INIT_EVERYTHING );
    SDL_SetHint( SDL_HINT_RENDER_SCALE_QUALITY, "1" );
    SDL_Window* window = SDL_CreateWindow( "Window", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN );
    SDL_Renderer* renderer = SDL_CreateRenderer( window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC );

    bool running = true;
    while( running )
    {
        SDL_Event ev;
        while( SDL_PollEvent( &ev ) )
        {
            if( SDL_QUIT == ev.type )
            {
                running = false;
                break;
            }
        }

        SDL_SetRenderDrawColor( renderer, 0xFF, 0xFF, 0xFF, 0xFF );
        SDL_RenderClear( renderer );

        SDL_Rect box;
        box.w = 30;
        box.h = 30;
        box.x = 50;
        box.y = 50;
        SDL_SetRenderDrawColor( renderer, 0xFF, 0x00, 0x00, 0xFF );
        SDL_RenderFillRect( renderer, &box );

        SDL_RenderPresent( renderer );
    }

    return 0;
}
#包括
int main(int argc,字符**argv)
{
SDL_Init(SDL_Init_EVERYTHING);
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY,“1”);
SDL_Window*Window=SDL_CreateWindow(“窗口”,SDL_WINDOWPOS_未定义,SDL_WINDOWPOS_未定义,640,480,显示SDL_Window_);
SDL_Renderer*Renderer=SDL_CreateRenderer(窗口,-1,SDL_Renderer_加速| SDL_Renderer_PRESENTVSYNC);
bool running=true;
(跑步时)
{
SDL_事件ev;
while(SDL_事件和ev))
{
如果(SDL_QUIT==ev.type)
{
运行=错误;
打破
}
}
SDL_SetRenderDrawColor(渲染器,0xFF,0xFF,0xFF,0xFF);
SDL_渲染器(渲染器);
SDL矩形盒;
方框w=30;
方框h=30;
框x=50;
方框y=50;
SDL_SetRenderDrawColor(渲染器,0xFF,0x00,0x00,0xFF);
SDL_RenderFillRect(渲染器和框);
SDL_渲染器呈现(渲染器);
}
返回0;
}

SDL\u SetRenderDrawColor()
影响
SDL\u RenderFillRect()
SDL\u RenderClear()

绘制红色方块后,需要在下一次调用之前将颜色重新设置为白色

#include <SDL2/SDL.h>

int main( int argc, char** argv )
{
    SDL_Init( SDL_INIT_EVERYTHING );
    SDL_SetHint( SDL_HINT_RENDER_SCALE_QUALITY, "1" );
    SDL_Window* window = SDL_CreateWindow( "Window", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN );
    SDL_Renderer* renderer = SDL_CreateRenderer( window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC );

    bool running = true;
    while( running )
    {
        SDL_Event ev;
        while( SDL_PollEvent( &ev ) )
        {
            if( SDL_QUIT == ev.type )
            {
                running = false;
                break;
            }
        }

        SDL_SetRenderDrawColor( renderer, 0xFF, 0xFF, 0xFF, 0xFF );
        SDL_RenderClear( renderer );

        SDL_Rect box;
        box.w = 30;
        box.h = 30;
        box.x = 50;
        box.y = 50;
        SDL_SetRenderDrawColor( renderer, 0xFF, 0x00, 0x00, 0xFF );
        SDL_RenderFillRect( renderer, &box );

        SDL_RenderPresent( renderer );
    }

    return 0;
}
#包括
int main(int argc,字符**argv)
{
SDL_Init(SDL_Init_EVERYTHING);
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY,“1”);
SDL_Window*Window=SDL_CreateWindow(“窗口”,SDL_WINDOWPOS_未定义,SDL_WINDOWPOS_未定义,640,480,显示SDL_Window_);
SDL_Renderer*Renderer=SDL_CreateRenderer(窗口,-1,SDL_Renderer_加速| SDL_Renderer_PRESENTVSYNC);
bool running=true;
(跑步时)
{
SDL_事件ev;
while(SDL_事件和ev))
{
如果(SDL_QUIT==ev.type)
{
运行=错误;
打破
}
}
SDL_SetRenderDrawColor(渲染器,0xFF,0xFF,0xFF,0xFF);
SDL_渲染器(渲染器);
SDL矩形盒;
方框w=30;
方框h=30;
框x=50;
方框y=50;
SDL_SetRenderDrawColor(渲染器,0xFF,0x00,0x00,0xFF);
SDL_RenderFillRect(渲染器和框);
SDL_渲染器呈现(渲染器);
}
返回0;
}
我想出来了! 我需要放置SDL_SetRenderDrawColor(渲染器,0xFF,0xFF,0xFF,0xFF);在循环内部,以便将渲染器重置为白色。我刚开始时让它将其设置回白色,因此SDL_RenderClear用当前绘制颜色(红色)填充窗口。感谢Tinfilpancakes和genpfault对我的帮助

我知道了!
我需要放置SDL_SetRenderDrawColor(渲染器,0xFF,0xFF,0xFF,0xFF);在循环内部,以便将渲染器重置为白色。我刚开始时让它将其设置回白色,因此SDL_RenderClear用当前绘制颜色(红色)填充窗口。感谢Tinfilpancakes和genpfault对我的帮助

好的,我在FillRect行之后添加了一行SDL_RenderPresent(渲染器),并将RenderClear向上移动到循环的开头,现在它输出一个实心的红色屏幕。窗口绝对大于30x30像素,为什么会发生这种情况?谢谢你的回答,我已经编辑了这个问题:)好的,我在FillRect行之后添加了行SDL_RenderPresent(渲染器),并将RenderClear向上移动到循环的开头,现在它输出一个实心的红色屏幕。窗口绝对大于30x30像素,为什么会发生这种情况?谢谢你的回答,我已经编辑了这个问题:)我没有看到任何错误