1
SDL_Texture *t0; SDL_Texture *t1;   
SDL_Texture *t[] = {t0,t1};

它编译得很好,但是如果我尝试渲染它(当然,考虑到 t0 和 t1 已经定义):

SDL_RenderCopy(ren,t[0],NULL,&someRect);
SDL_RenderCopy(ren,t[1],NULL,&someRect);

我得到......什么都没有(我的意思是什么都没有:纯粹、无限、深不可测和无用的黑暗)。和这个:

SDL_RenderCopy(ren,t0,NULL,&someRect);
SDL_RenderCopy(ren,t1,NULL,&someRect);

工作得很好。

问题是,假设我的游戏有 9999 个纹理,我只想循环遍历纹理数组,而不是做 9999 次无聊的手动工作。我非常感谢任何帮助,因为我不知道 SDL_Texture 是如何实现的,并且完全不知道为什么它在数组中不起作用。

4

1 回答 1

4

我只是尝试了一个简单的示例,并且在为 SDL_Texture 指针使用数组时没有问题,所以我认为这里未显示的代码部分有问题。

您究竟是如何以及在何处定义 t0 和 t1 变量的?如果您在初始化数组之前没有分配它们,如上所示,则数组中的指针将指向任意值(指向未初始化的指针 t0 和 t1 指向的任何一个),之后更改后者不会更改存储在数组中的副本. (这意味着您在使用数组时没有在调用 SDL_RenderCopy 时使用有效的 SDL_Texture*)。

我的测试代码的相关部分是这样的:

SDL_Texture *tex0=LoadImage("test.bmp",renderer), *tex1=LoadImage("test1.bmp",renderer);
SDL_Texture *arr[]={tex0,tex1};
SDL_Rect dest0, dest1;
dest0.x=0;
dest0.y=0;
dest1.x=200;
dest1.y=200;

SDL_QueryTexture(tex0, NULL, NULL, &dest0.w, &dest0.h);
SDL_QueryTexture(tex1, NULL, NULL, &dest1.w, &dest1.h);

SDL_RenderClear(renderer);

SDL_RenderCopy(renderer,tex0,NULL,&dest0);
SDL_RenderCopy(renderer,tex1,NULL,&dest1);
//SDL_RenderCopy(renderer,arr[0],NULL,&dest0);
//SDL_RenderCopy(renderer,arr[1],NULL,&dest1);                                             

SDL_RenderPresent(renderer);
SDL_Delay(2000);

对 SDL_RenderCopy 的注释和未注释调用都产生了相同的结果。当然,这段代码绝不是理想的,只是为了测试手头的问题。

我很抱歉无法给出明确的答案,希望我能有所帮助。

于 2013-10-17T02:19:55.143 回答