簡體   English   中英

如何使用SDL2在C ++中將框渲染到屏幕上?

[英]How do I render a box to the screen in C++ using 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
}

編輯:這是完整的文件。

我希望它在屏幕上繪制一個紅色矩形,但是窗口是完全紅色的(具有正確的大小,名稱等,可以正確退出)。

在所有渲染調用之后,您必須調用SDL_RenderPresent 在這種情況下,在SDL_RenderFillRect(...)

在渲染循環開始時使用SDL_RenderClear清除緩沖區。

SDL2 Wiki的示例

SDL_SetRenderDrawColor()影響SDL_RenderFillRect() SDL_RenderClear()

繪制紅色正方形之后,您需要在下一個SDL_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;
}

我想到了!

我需要放SDL_SetRenderDrawColor(renderer,0xFF,0xFF,0xFF,0xFF); 在循環內部,因此它將渲染器重置為每個刻度為白色。 我剛開始就將其設置為白色,因此SDL_RenderClear使用當前繪制顏色(紅色)填充了窗口。 感謝TinfoilPancakes和genpfault幫助我!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM