2013-10-17 36 views
0
SDL_Texture *t0; SDL_Texture *t1; 
SDL_Texture *t[] = {t0,t1}; 

它編譯就好了,但如果我嘗試呈現它(考慮到T0和T1已經定義,當然):SDL 2.0/C++ - 如何製作「SDL_Texture」數組?

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是如何實現的,並且完全不知道爲什麼它不能在數組內工作。

回答

3

我剛剛嘗試了一個簡單的例子,並且在使用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的評論,而不是評論的呼叫產生相同的結果。 這段代碼當然不是理想的,但僅僅是爲了測試手頭的問題。

我很抱歉無法給出明確的答案,並希望我能有一點幫助。

+0

你說得對!非常感謝你!我在實際的「加載」之前創建了紋理數組。謝謝! –

+1

謝謝你接受我的回答,我很高興我能幫忙;-) –