Я делаю игру на C ++ с SDL и хочу рендерить частицы с помощью SDL_FillRect ().
Я часами играл с кодом, но что бы я ни делал, частицы не рисуют.
Это код в моей функции Render (я убедился, что я действительно вызывал функцию):
void Particle::Render()
{
SDL_Rect rect;
rect.x = x;
rect.y = y;
//rect.w = Particle::Particle_Size;
//rect.h = Particle::Particle_Size;
rect.w = 8;
rect.h = 8;
surface = SDL_CreateRGBSurface(SDL_SWSURFACE,8,8,32,0,0,0,0);
if(SDL_FillRect(surface,&rect,SDL_MapRGB(surface->format,0,0,0)) != 0) printf("Error");
//SDL_RenderCopy(renderer,texture,NULL,&rect);
}
Консоль не печатает «Ошибка», поэтому SDL_FillRect () выполнен успешно. Тем не менее, никакие правки не рисуются на экране.
Я попытался создать текстуру с помощью SDL_CreateTextureFromSurface () с этой переданной поверхностью, а затем использовал SDL_RenderCopy, который закомментирован в вышеупомянутой функции, но он работал до того, как я закомментировал ее. Я хочу использовать SDL_FillRect, чтобы я мог иметь цветные текстуры, хотя.
Я что-то пропустил?
SDL_CreateRGBSurface()
Функция создает вне экрана поверхность. Если вы хотите нарисовать на экране, вам придется рисовать на поверхности, возвращенной SDL_GetWindowSurface()
,
То есть, если вы используете SDL 2.0.
Я думаю, что вы могли бы использовать эту функцию, чтобы сделать то, что вы ищете:
SDL_RenderFillRect()
https://wiki.libsdl.org/SDL_RenderFillRect
Вы должны установить цвет рендера раньше:
SDL_SetRenderDrawColor();
Я думаю, что вы также можете обновить поверхность окна, чтобы получить то, что вы должны работать.
Что бы использовать
SDL_UpdateWindowSurface().
Надеюсь, поможет!