如何使用 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 维基
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(渲染器,0xFF,0xFF,0xFF,0xFF)放在循环内部,这样它就会将渲染器重置为白色。我只是在开始时将其设置为白色一次,因此SDL_RenderClear用当前的绘制颜色(红色)填充窗口。感谢Tinfoil煎饼和genpfault帮助我!
相关文章:
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 使用 SFML 和 C++ 将 Pixel 打印到屏幕上
- 在 Windows 8/10 技术中完全实时的屏幕捕获,没有延迟
- 如何创建事件驱动的 SDL2 应用程序
- 使用 SDL2 和SDL_image C++加载图像
- Winapi:屏幕截图未显示在窗口中
- 如何在快板的屏幕中显示子位图的绘制?
- 将 SDL2 与 CMake 链接起来
- SDL2:如何在不清除屏幕的情况下渲染
- 如何使用 SDL2 在C++中将框渲染到屏幕上
- 如何使用 SDL2 移动屏幕,C++
- SDL2-从Surface(屏幕快照)创建纹理的问题
- 在锁定屏幕上恢复Android SDL2
- 用SDL2在每个帧上渲染屏幕的部分
- SDL1 -> 使用自定义屏幕模式类构建 SDL2 分辨率列表
- SDL2图像到屏幕问题
- SDL2加载屏幕/线程
- 如何使用SDL2获得屏幕分辨率
- SDL2,创建比屏幕大的窗口