我有一个要在渲染循环中渲染的纹理array.当我遍历数组时,我没有得到任何实际显示在窗口上的纹理.
以下是我如何初始化我想使用的纹理:
SDL_Texture* tracks[5];
SDL_Rect trackRects[5];
for (int i = 1; i < 6; i++) {
char buf[20];
snprintf(buf, 20, ".\\assets\\track%d.png", i);
tracks[i-1] = IMG_LoadTexture(appRenderer, buf);
trackRects[i-1].x = 15;
trackRects[i-1].y = 28*(i-1) + 150;
}
为了呈现所有这些内容,我try 这样做:
for (int i = 0; i < 5; i++) {
res = SDL_RenderCopy(appRenderer, tracks[i], NULL, &trackRects[i]);
if (res < 0) printError();
}
这不会返回任何错误,它会编译,但当我启动我的程序时,它不会显示任何图像.
完整代码:
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <stdio.h>
int running = 1;
SDL_Window* appWindow = NULL;
SDL_Surface* appSurface = NULL;
SDL_Renderer* appRenderer = NULL;
int res;
int main(int argc, char* argv[]) {
int videoerror = SDL_Init(SDL_INIT_VIDEO);
if (videoerror < 0) printError();
SDL_Window* appWindow = SDL_CreateWindow("name", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 1000, 800, SDL_WINDOW_SHOWN);
int imgerror = IMG_Init(IMG_INIT_PNG);
if (imgerror < 0) printError();
SDL_Renderer* appRenderer = SDL_CreateRenderer(appWindow, -1, SDL_RENDERER_SOFTWARE);
SDL_Texture* tracks[5];
SDL_Rect trackRects[5];
for (int i = 1; i < 6; i++) {
char buf[20];
snprintf(buf, 20, ".\\assets\\track%d.png", i);
tracks[i-1] = IMG_LoadTexture(appRenderer, buf);
trackRects[i-1].x = 15;
trackRects[i-1].y = 28*(i-1) + 150;
}
while (running == 1) {
SDL_Event event;
while (SDL_PollEvent(&event) != 0) {
if (event.type == SDL_QUIT) {
running = 0;
}
}
SDL_RenderClear(appRenderer);
for (int i = 0; i < 5; i++) {
res = SDL_RenderCopy(appRenderer, tracks[i], NULL, &trackRects[i]);
if (res < 0) printError();
}
SDL_RenderPresent(appRenderer);
SDL_Delay(100);
}
SDL_DestroyWindow(appWindow);
appWindow = NULL;
IMG_Quit();
SDL_Quit();
return 0;
}