[英]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
清除緩沖區。
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.