2017-06-29 8 views
1

私はテーブルの形式でテクスチャにchar配列を表示しようとしています。それはうまく動作しますが、レンダラー全体をリロードすることなく、配列の一部のchar(テーブルの値)を動的に変更したいと思います。画面の一部だけをテクスチャとレンダラで更新しますか?

もう一度SDL_RenderClearSDL_RenderPresentを使ってみましたが、ウィンドウ全体がクリアされました。

テーブルの一部だけを選択し、残りの部分を変更せずに変更するにはどうすればよいですか?

void draw_battlefield(t_env *e, int origin_x, int origin_y, int width, int height) 
{ 
int j; 
float x; 
float y; 
SDL_Color color = {255, 0, 0, 0}; 
SDL_Surface *surface; 
SDL_Texture *texture; 
int texW = 0; 
int texH = 0; 
SDL_Rect dstrect; 

j = -1; 
x = (float)origin_x; 
y = origin_y; 
while (++j < 4096) 
{ 
    surface = TTF_RenderText_Solid(e->font_nb, base((unsigned char)e->battlefield[j]), color); 
    texture = SDL_CreateTextureFromSurface(e->renderer, surface); 
    texW = 0; 
    texH = 0; 
    SDL_QueryTexture(texture, NULL, NULL, &texW, &texH); 
    dstrect = fill_rect((int)x, (int)y, &texW, &texH); 
    x += ((float)width/64); 
    SDL_RenderCopy(e->renderer, texture, NULL, &dstrect); 
    if ((j & 0x3f) == 0x3f) 
    { 
     x = (float)origin_x; 
     y += ((float)height/64); 
    } 
    SDL_DestroyTexture(texture); 
    SDL_FreeSurface(surface); 
} 
} 
+1

各フレームの再描画画面は完全に正常です。 – HolyBlackCat

答えて

0

あなたは、画面の一部だけをリフレッシュしたい場合は、ビューポートを使用することができます。
ばかり言うlazyfoo.netチュートリアルからの引用のすべて:あなたが唯一のミニマップのようなもののために画面の一部をレンダリングする

いくつかの回。ビューポートを使用すると、画面上でレンダリングする場所を制御できます。

与えられたレンダリングに関連付けられたビューポートを設定および取得する方法の詳細については、SDL_RenderGetViewportおよびを参照してください。

基本的な考え方は、ユーザーがレンダリング先の矩形を設定でき、座標は矩形に対して相対的に指定されるということです。ウィンドウ全体をリフレッシュせずにテクスチャだけを更新したい場合は、ビューポートに入れてください。それだけです。

関連する問題