【发布时间】:2016-10-28 09:18:24
【问题描述】:
我正在尝试通过像素级访问更改 SDL 中窗口的背景颜色(我正在制作粒子爆炸),但背景保持白色。
首先我尝试使用 memset 将像素的内存设置为 0x00 以将颜色更改为黑色(我使用 memset 是因为我正在学习使用它的教程)
memset(buffer, 0x00, SCREEN_WIDTH * SCREEN_HEIGHT * sizeof(Uint32));
由于这不起作用,我查找了如何更改渲染器的绘制颜色并想出了:
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 255);
这是我的纹理、渲染器和缓冲区代码,以及我如何设置窗口(SCREEN_WIDTH 和 SCREEN_HEIGHT 是分别设置为 800 和 600 的常量整数):
SDL_Window* window = SDL_CreateWindow("Fire Particle Explosion",
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_PRESENTVSYNC);
SDL_Texture* texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STATIC, SCREEN_WIDTH, SCREEN_HEIGHT);
Uint32* buffer = new Uint32[SCREEN_WIDTH * SCREEN_HEIGHT];
SDL_UpdateTexture(texture, NULL, buffer, SCREEN_WIDTH * sizeof(Uint32));
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, texture, NULL, NULL);
SDL_RenderPresent(renderer);
如何正确地逐像素更改背景,为什么我尝试的两种方式都不起作用?
【问题讨论】: