无法弄清楚为什么没有在 SDL 中绘制线
Can't figure out why line is not being drawn in SDL
这个在 SDL 中画线的程序不工作:
#include "SDL.h"
int main(int argc, char** argv)
{
SDL_Window* window = SDL_CreateWindow("A line", 10, 10, 1200, 600, false);
bool running = true;
while (running)
{
SDL_Event events;
if (SDL_WaitEvent(&events))
if (events.type == SDL_QUIT)
running = false;
SDL_Renderer* renderer;
renderer = SDL_CreateRenderer(window, -1, 0);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
SDL_RenderDrawLine(renderer, 10, 10, 500, 500);
}
SDL_Quit();
return 1;
}
当我运行程序时,我没有得到任何错误,但也没有绘制任何东西。
几个问题:
- 您缺少一个
SDL_RenderPresent()
,因此实际上没有任何内容被绘制到屏幕上。
- 正如@tkausl 指出的那样,不要在每一帧
中创建(和泄漏)SDL_Renderer
- 在循环中使用
SDL_PollEvent()
以完全耗尽事件队列。
SDL_SetRenderDrawColor()
影响 SDL_RenderClear()
以及 SDL_RenderDrawLine()
;正如人们想象的那样 black-on-black 有点难看:) 在尝试画线之前设置一个更明显的颜色。
- 可能应该将
a = 255
传递给 SDL_SetRenderDrawColor()
。
总计:
// g++ main.cpp `pkg-config --cflags --libs sdl2`
#include "SDL.h"
int main(int argc, char** argv)
{
SDL_Window* window = SDL_CreateWindow("A line", 10, 10, 1200, 600, false);
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, 0);
bool running = true;
while (running)
{
SDL_Event event;
while( SDL_PollEvent(&event) )
{
if (event.type == SDL_QUIT)
running = false;
}
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
SDL_RenderDrawLine(renderer, 10, 10, 500, 500);
SDL_RenderPresent( renderer );
}
SDL_Quit();
return 1;
}
这个在 SDL 中画线的程序不工作:
#include "SDL.h"
int main(int argc, char** argv)
{
SDL_Window* window = SDL_CreateWindow("A line", 10, 10, 1200, 600, false);
bool running = true;
while (running)
{
SDL_Event events;
if (SDL_WaitEvent(&events))
if (events.type == SDL_QUIT)
running = false;
SDL_Renderer* renderer;
renderer = SDL_CreateRenderer(window, -1, 0);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
SDL_RenderDrawLine(renderer, 10, 10, 500, 500);
}
SDL_Quit();
return 1;
}
当我运行程序时,我没有得到任何错误,但也没有绘制任何东西。
几个问题:
- 您缺少一个
SDL_RenderPresent()
,因此实际上没有任何内容被绘制到屏幕上。 - 正如@tkausl 指出的那样,不要在每一帧 中创建(和泄漏)SDL_Renderer
- 在循环中使用
SDL_PollEvent()
以完全耗尽事件队列。 SDL_SetRenderDrawColor()
影响SDL_RenderClear()
以及SDL_RenderDrawLine()
;正如人们想象的那样 black-on-black 有点难看:) 在尝试画线之前设置一个更明显的颜色。- 可能应该将
a = 255
传递给SDL_SetRenderDrawColor()
。
总计:
// g++ main.cpp `pkg-config --cflags --libs sdl2`
#include "SDL.h"
int main(int argc, char** argv)
{
SDL_Window* window = SDL_CreateWindow("A line", 10, 10, 1200, 600, false);
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, 0);
bool running = true;
while (running)
{
SDL_Event event;
while( SDL_PollEvent(&event) )
{
if (event.type == SDL_QUIT)
running = false;
}
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
SDL_RenderDrawLine(renderer, 10, 10, 500, 500);
SDL_RenderPresent( renderer );
}
SDL_Quit();
return 1;
}