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 に答える